ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent.pm
(Generate patch)

Comparing AnyEvent/lib/AnyEvent.pm (file contents):
Revision 1.94 by root, Sat Apr 26 04:33:51 2008 UTC vs.
Revision 1.100 by elmex, Sun Apr 27 19:15:43 2008 UTC

66 66
67Of course, if you want lots of policy (this can arguably be somewhat 67Of course, if you want lots of policy (this can arguably be somewhat
68useful) and you want to force your users to use the one and only event 68useful) and you want to force your users to use the one and only event
69model, you should I<not> use this module. 69model, you should I<not> use this module.
70 70
71#TODO#
72
73Net::IRC3
74AnyEvent::HTTPD
75AnyEvent::DNS
76IO::AnyEvent
77Net::FPing
78Net::XMPP2
79Coro
80
81AnyEvent::IRC
82AnyEvent::HTTPD
83AnyEvent::DNS
84AnyEvent::Handle
85AnyEvent::Socket
86AnyEvent::FPing
87AnyEvent::XMPP
88AnyEvent::SNMP
89Coro
71 90
72=head1 DESCRIPTION 91=head1 DESCRIPTION
73 92
74L<AnyEvent> provides an identical interface to multiple event loops. This 93L<AnyEvent> provides an identical interface to multiple event loops. This
75allows module authors to utilise an event loop without forcing module 94allows module authors to utilise an event loop without forcing module
457might chose the wrong one unless you load the correct one yourself. 476might chose the wrong one unless you load the correct one yourself.
458 477
459You can chose to use a rather inefficient pure-perl implementation by 478You can chose to use a rather inefficient pure-perl implementation by
460loading the C<AnyEvent::Impl::Perl> module, which gives you similar 479loading the C<AnyEvent::Impl::Perl> module, which gives you similar
461behaviour everywhere, but letting AnyEvent chose is generally better. 480behaviour everywhere, but letting AnyEvent chose is generally better.
481
482=head1 OTHER MODULES
483
484L<AnyEvent> itself comes with useful utility modules:
485
486To make it easier to do non-blocking IO the modules L<AnyEvent::Handle>
487and L<AnyEvent::Socket> are provided. L<AnyEvent::Handle> provides
488read and write buffers and manages watchers for reads and writes.
489L<AnyEvent::Socket> provides means to do non-blocking connects.
490
491Aside from those there are these modules that support AnyEvent (and use it
492for non-blocking IO):
493
494=over 4
495
496=item L<AnyEvent::FastPing>
497
498=item L<Net::IRC3>
499
500=item L<Net::XMPP2>
501
502=back
462 503
463=cut 504=cut
464 505
465package AnyEvent; 506package AnyEvent;
466 507
944 EV/EV 400000 244 0.56 0.46 0.31 EV native interface 985 EV/EV 400000 244 0.56 0.46 0.31 EV native interface
945 EV/Any 100000 244 2.50 0.46 0.29 EV + AnyEvent watchers 986 EV/Any 100000 244 2.50 0.46 0.29 EV + AnyEvent watchers
946 CoroEV/Any 100000 244 2.49 0.44 0.29 coroutines + Coro::Signal 987 CoroEV/Any 100000 244 2.49 0.44 0.29 coroutines + Coro::Signal
947 Perl/Any 100000 513 4.92 0.87 1.12 pure perl implementation 988 Perl/Any 100000 513 4.92 0.87 1.12 pure perl implementation
948 Event/Event 16000 516 31.88 31.30 0.85 Event native interface 989 Event/Event 16000 516 31.88 31.30 0.85 Event native interface
949 Event/Any 16000 936 39.17 33.63 1.43 Event + AnyEvent watchers 990 Event/Any 16000 590 35.75 31.42 1.08 Event + AnyEvent watchers
950 Glib/Any 16000 1357 98.22 12.41 54.00 quadratic behaviour 991 Glib/Any 16000 1357 98.22 12.41 54.00 quadratic behaviour
951 Tk/Any 2000 1860 26.97 67.98 14.00 SEGV with >> 2000 watchers 992 Tk/Any 2000 1860 26.97 67.98 14.00 SEGV with >> 2000 watchers
952 POE/Event 2000 6644 108.64 736.02 14.73 via POE::Loop::Event 993 POE/Event 2000 6644 108.64 736.02 14.73 via POE::Loop::Event
953 POE/Select 2000 6343 94.13 809.12 565.96 via POE::Loop::Select 994 POE/Select 2000 6343 94.13 809.12 565.96 via POE::Loop::Select
954 995
958well. For example, a select-based event loop (such as the pure perl one) 999well. For example, a select-based event loop (such as the pure perl one)
959can never compete with an event loop that uses epoll when the number of 1000can never compete with an event loop that uses epoll when the number of
960file descriptors grows high. In this benchmark, all events become ready at 1001file descriptors grows high. In this benchmark, all events become ready at
961the same time, so select/poll-based implementations get an unnatural speed 1002the same time, so select/poll-based implementations get an unnatural speed
962boost. 1003boost.
1004
1005Also, note that the number of watchers usually has a nonlinear effect on
1006overall speed, that is, creating twice as many watchers doesn't take twice
1007the time - usually it takes longer. This puts event loops tested with a
1008higher number of watchers at a disadvantage.
1009
1010To put the range of results into perspective, consider that on the
1011benchmark machine, handling an event takes roughly 1600 CPU cycles with
1012EV, 3100 CPU cycles with AnyEvent's pure perl loop and almost 3000000 CPU
1013cycles with POE.
963 1014
964C<EV> is the sole leader regarding speed and memory use, which are both 1015C<EV> is the sole leader regarding speed and memory use, which are both
965maximal/minimal, respectively. Even when going through AnyEvent, it uses 1016maximal/minimal, respectively. Even when going through AnyEvent, it uses
966far less memory than any other event loop and is still faster than Event 1017far less memory than any other event loop and is still faster than Event
967natively. 1018natively.
1057 1108
1058=head3 Results 1109=head3 Results
1059 1110
1060 name sockets create request 1111 name sockets create request
1061 EV 20000 69.01 11.16 1112 EV 20000 69.01 11.16
1062 Perl 20000 75.28 112.76 1113 Perl 20000 73.32 35.87
1063 Event 20000 212.62 257.32 1114 Event 20000 212.62 257.32
1064 Glib 20000 651.16 1896.30 1115 Glib 20000 651.16 1896.30
1065 POE 20000 349.67 12317.24 uses POE::Loop::Event 1116 POE 20000 349.67 12317.24 uses POE::Loop::Event
1066 1117
1067=head3 Discussion 1118=head3 Discussion
1113 1164
1114=head3 Results 1165=head3 Results
1115 1166
1116 name sockets create request 1167 name sockets create request
1117 EV 16 20.00 6.54 1168 EV 16 20.00 6.54
1169 Perl 16 25.75 12.62
1118 Event 16 81.27 35.86 1170 Event 16 81.27 35.86
1119 Glib 16 32.63 15.48 1171 Glib 16 32.63 15.48
1120 Perl 16 24.62 162.37
1121 POE 16 261.87 276.28 uses POE::Loop::Event 1172 POE 16 261.87 276.28 uses POE::Loop::Event
1122 1173
1123=head3 Discussion 1174=head3 Discussion
1124 1175
1125The benchmark tries to test the performance of a typical small 1176The benchmark tries to test the performance of a typical small
1126server. While knowing how various event loops perform is interesting, keep 1177server. While knowing how various event loops perform is interesting, keep
1127in mind that their overhead in this case is usually not as important, due 1178in mind that their overhead in this case is usually not as important, due
1128to the small absolute number of watchers. 1179to the small absolute number of watchers (that is, you need efficiency and
1180speed most when you have lots of watchers, not when you only have a few of
1181them).
1129 1182
1130EV is again fastest. 1183EV is again fastest.
1131 1184
1132The C-based event loops Event and Glib come in second this time, as the 1185The C-based event loops Event and Glib come in second this time, as the
1133overhead of running an iteration is much smaller in C than in Perl (little 1186overhead of running an iteration is much smaller in C than in Perl (little
1134code to execute in the inner loop, and perl's function calling overhead is 1187code to execute in the inner loop, and perl's function calling overhead is
1135high, and updating all the data structures is costly). 1188high, and updating all the data structures is costly).
1136 1189
1137The pure perl event loop is much slower, but still competitive. 1190The pure perl event loop is much slower, but still competitive.
1138 1191
1139POE also performs much better in this case, but is is stillf ar behind the 1192POE also performs much better in this case, but is is still far behind the
1140others. 1193others.
1141 1194
1142=head3 Summary 1195=head3 Summary
1143 1196
1144=over 4 1197=over 4

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines