… | |
… | |
148 | creates a watcher waiting for "r"eadable or "w"ritable events, |
148 | creates a watcher waiting for "r"eadable or "w"ritable events, |
149 | respectively. C<cb> is the callback to invoke each time the file handle |
149 | respectively. C<cb> is the callback to invoke each time the file handle |
150 | becomes ready. |
150 | becomes ready. |
151 | |
151 | |
152 | The I/O watcher might use the underlying file descriptor or a copy of it. |
152 | The I/O watcher might use the underlying file descriptor or a copy of it. |
153 | It is not allowed to close a file handle as long as any watcher is active |
153 | You must not close a file handle as long as any watcher is active on the |
154 | on the underlying file descriptor. |
154 | underlying file descriptor. |
155 | |
155 | |
156 | Some event loops issue spurious readyness notifications, so you should |
156 | Some event loops issue spurious readyness notifications, so you should |
157 | always use non-blocking calls when reading/writing from/to your file |
157 | always use non-blocking calls when reading/writing from/to your file |
158 | handles. |
158 | handles. |
|
|
159 | |
|
|
160 | Although the callback might get passed parameters, their value and |
|
|
161 | presence is undefined and you cannot rely on them. Portable AnyEvent |
|
|
162 | callbacks cannot use arguments passed to I/O watcher callbacks. |
159 | |
163 | |
160 | Example: |
164 | Example: |
161 | |
165 | |
162 | # wait for readability of STDIN, then read a line and disable the watcher |
166 | # wait for readability of STDIN, then read a line and disable the watcher |
163 | my $w; $w = AnyEvent->io (fh => \*STDIN, poll => 'r', cb => sub { |
167 | my $w; $w = AnyEvent->io (fh => \*STDIN, poll => 'r', cb => sub { |
… | |
… | |
176 | case. |
180 | case. |
177 | |
181 | |
178 | The timer callback will be invoked at most once: if you want a repeating |
182 | The timer callback will be invoked at most once: if you want a repeating |
179 | timer you have to create a new watcher (this is a limitation by both Tk |
183 | timer you have to create a new watcher (this is a limitation by both Tk |
180 | and Glib). |
184 | and Glib). |
|
|
185 | |
|
|
186 | Although the callback might get passed parameters, their value and |
|
|
187 | presence is undefined and you cannot rely on them. Portable AnyEvent |
|
|
188 | callbacks cannot use arguments passed to time watcher callbacks. |
181 | |
189 | |
182 | Example: |
190 | Example: |
183 | |
191 | |
184 | # fire an event after 7.7 seconds |
192 | # fire an event after 7.7 seconds |
185 | my $w = AnyEvent->timer (after => 7.7, cb => sub { |
193 | my $w = AnyEvent->timer (after => 7.7, cb => sub { |
… | |
… | |
926 | |
934 | |
927 | =head2 Results |
935 | =head2 Results |
928 | |
936 | |
929 | name watchers bytes create invoke destroy comment |
937 | name watchers bytes create invoke destroy comment |
930 | EV/EV 400000 244 0.56 0.46 0.31 EV native interface |
938 | EV/EV 400000 244 0.56 0.46 0.31 EV native interface |
931 | EV/Any 100000 610 3.52 0.91 0.75 EV + AnyEvent watchers |
939 | EV/Any 100000 244 2.50 0.46 0.29 EV + AnyEvent watchers |
932 | CoroEV/Any 100000 610 3.49 0.92 0.75 coroutines + Coro::Signal |
940 | CoroEV/Any 100000 244 2.49 0.44 0.29 coroutines + Coro::Signal |
933 | Perl/Any 100000 513 4.91 0.92 1.15 pure perl implementation |
941 | Perl/Any 100000 513 4.92 0.87 1.12 pure perl implementation |
934 | Event/Event 16000 523 28.05 21.38 0.86 Event native interface |
942 | Event/Event 16000 516 31.88 31.30 0.85 Event native interface |
935 | Event/Any 16000 943 34.43 20.48 1.39 Event + AnyEvent watchers |
943 | Event/Any 16000 936 39.17 33.63 1.43 Event + AnyEvent watchers |
936 | Glib/Any 16000 1357 96.99 12.55 55.51 quadratic behaviour |
944 | Glib/Any 16000 1357 98.22 12.41 54.00 quadratic behaviour |
937 | Tk/Any 2000 1855 27.01 66.61 14.03 SEGV with >> 2000 watchers |
945 | Tk/Any 2000 1860 26.97 67.98 14.00 SEGV with >> 2000 watchers |
938 | POE/Event 2000 6644 108.15 768.19 14.33 via POE::Loop::Event |
946 | POE/Event 2000 6644 108.64 736.02 14.73 via POE::Loop::Event |
939 | POE/Select 2000 6343 94.69 807.65 562.69 via POE::Loop::Select |
947 | POE/Select 2000 6343 94.13 809.12 565.96 via POE::Loop::Select |
940 | |
948 | |
941 | =head2 Discussion |
949 | =head2 Discussion |
942 | |
950 | |
943 | The benchmark does I<not> measure scalability of the event loop very |
951 | The benchmark does I<not> measure scalability of the event loop very |
944 | well. For example, a select-based event loop (such as the pure perl one) |
952 | well. For example, a select-based event loop (such as the pure perl one) |
… | |
… | |
946 | file descriptors grows high. In this benchmark, all events become ready at |
954 | file descriptors grows high. In this benchmark, all events become ready at |
947 | the same time, so select/poll-based implementations get an unnatural speed |
955 | the same time, so select/poll-based implementations get an unnatural speed |
948 | boost. |
956 | boost. |
949 | |
957 | |
950 | C<EV> is the sole leader regarding speed and memory use, which are both |
958 | C<EV> is the sole leader regarding speed and memory use, which are both |
951 | maximal/minimal, respectively. Even when going through AnyEvent, there are |
959 | maximal/minimal, respectively. Even when going through AnyEvent, it uses |
952 | only two event loops that use slightly less memory (the C<Event> module |
960 | far less memory than any other event loop and is still faster than Event |
953 | natively and the pure perl backend), and no faster event models, not even |
961 | natively. |
954 | C<Event> natively. |
|
|
955 | |
962 | |
956 | The pure perl implementation is hit in a few sweet spots (both the |
963 | The pure perl implementation is hit in a few sweet spots (both the |
957 | zero timeout and the use of a single fd hit optimisations in the perl |
964 | zero timeout and the use of a single fd hit optimisations in the perl |
958 | interpreter and the backend itself, and all watchers become ready at the |
965 | interpreter and the backend itself, and all watchers become ready at the |
959 | same time). Nevertheless this shows that it adds very little overhead in |
966 | same time). Nevertheless this shows that it adds very little overhead in |