… | |
… | |
903 | |
903 | |
904 | name watchers bytes create invoke destroy comment |
904 | name watchers bytes create invoke destroy comment |
905 | EV/EV 400000 244 0.56 0.46 0.31 EV native interface |
905 | EV/EV 400000 244 0.56 0.46 0.31 EV native interface |
906 | EV/Any 100000 610 3.52 0.91 0.75 EV + AnyEvent watchers |
906 | EV/Any 100000 610 3.52 0.91 0.75 EV + AnyEvent watchers |
907 | CoroEV/Any 100000 610 3.49 0.92 0.75 coroutines + Coro::Signal |
907 | CoroEV/Any 100000 610 3.49 0.92 0.75 coroutines + Coro::Signal |
908 | Perl/Any 16000 654 4.64 1.22 0.77 pure perl implementation |
908 | Perl/Any 100000 513 4.91 0.92 1.15 pure perl implementation |
909 | Event/Event 16000 523 28.05 21.38 0.86 Event native interface |
909 | Event/Event 16000 523 28.05 21.38 0.86 Event native interface |
910 | Event/Any 16000 943 34.43 20.48 1.39 Event + AnyEvent watchers |
910 | Event/Any 16000 943 34.43 20.48 1.39 Event + AnyEvent watchers |
911 | Glib/Any 16000 1357 96.99 12.55 55.51 quadratic behaviour |
911 | Glib/Any 16000 1357 96.99 12.55 55.51 quadratic behaviour |
912 | Tk/Any 2000 1855 27.01 66.61 14.03 SEGV with >> 2000 watchers |
912 | Tk/Any 2000 1855 27.01 66.61 14.03 SEGV with >> 2000 watchers |
913 | POE/Event 2000 6644 108.15 768.19 14.33 via POE::Loop::Event |
913 | POE/Event 2000 6644 108.15 768.19 14.33 via POE::Loop::Event |
… | |
… | |
921 | file descriptors grows high. In this benchmark, only a single filehandle |
921 | file descriptors grows high. In this benchmark, only a single filehandle |
922 | is used (although some of the AnyEvent adaptors dup() its file descriptor |
922 | is used (although some of the AnyEvent adaptors dup() its file descriptor |
923 | to worka round bugs). |
923 | to worka round bugs). |
924 | |
924 | |
925 | C<EV> is the sole leader regarding speed and memory use, which are both |
925 | C<EV> is the sole leader regarding speed and memory use, which are both |
926 | maximal/minimal, respectively. Even when going through AnyEvent, there is |
926 | maximal/minimal, respectively. Even when going through AnyEvent, there are |
927 | only one event loop that uses less memory (the C<Event> module natively), and |
927 | only two event loops that use slightly less memory (the C<Event> module |
928 | no faster event model, not event C<Event> natively. |
928 | natively and the pure perl backend), and no faster event models, not even |
|
|
929 | C<Event> natively. |
929 | |
930 | |
930 | The pure perl implementation is hit in a few sweet spots (both the |
931 | The pure perl implementation is hit in a few sweet spots (both the |
931 | zero timeout and the use of a single fd hit optimisations in the perl |
932 | zero timeout and the use of a single fd hit optimisations in the perl |
932 | interpreter and the backend itself). Nevertheless tis shows that it |
933 | interpreter and the backend itself). Nevertheless tis shows that it |
933 | adds very little overhead in itself. Like any select-based backend its |
934 | adds very little overhead in itself. Like any select-based backend its |
934 | performance becomes really bad with lots of file descriptors, of course, |
935 | performance becomes really bad with lots of file descriptors, of course, |
935 | but this was not subjetc of this benchmark. |
936 | but this was not subject of this benchmark. |
936 | |
937 | |
937 | The C<Event> module has a relatively high setup and callback invocation cost, |
938 | The C<Event> module has a relatively high setup and callback invocation cost, |
938 | but overall scores on the third place. |
939 | but overall scores on the third place. |
939 | |
940 | |
940 | C<Glib>'s memory usage is quite a bit bit higher, but it features a |
941 | C<Glib>'s memory usage is quite a bit bit higher, but it features a |