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.95 by root, Sat Apr 26 11:06:45 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
963 1004
964Also, note that the number of watchers usually has a nonlinear effect on 1005Also, note that the number of watchers usually has a nonlinear effect on
965overall speed, that is, creating twice as many watchers doesn't take twice 1006overall speed, that is, creating twice as many watchers doesn't take twice
966the time - usually it takes longer. This puts event loops tested with a 1007the time - usually it takes longer. This puts event loops tested with a
967higher number of watchers at a disadvantage. 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.
968 1014
969C<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
970maximal/minimal, respectively. Even when going through AnyEvent, it uses 1016maximal/minimal, respectively. Even when going through AnyEvent, it uses
971far 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
972natively. 1018natively.
1062 1108
1063=head3 Results 1109=head3 Results
1064 1110
1065 name sockets create request 1111 name sockets create request
1066 EV 20000 69.01 11.16 1112 EV 20000 69.01 11.16
1067 Perl 20000 75.28 112.76 1113 Perl 20000 73.32 35.87
1068 Event 20000 212.62 257.32 1114 Event 20000 212.62 257.32
1069 Glib 20000 651.16 1896.30 1115 Glib 20000 651.16 1896.30
1070 POE 20000 349.67 12317.24 uses POE::Loop::Event 1116 POE 20000 349.67 12317.24 uses POE::Loop::Event
1071 1117
1072=head3 Discussion 1118=head3 Discussion
1118 1164
1119=head3 Results 1165=head3 Results
1120 1166
1121 name sockets create request 1167 name sockets create request
1122 EV 16 20.00 6.54 1168 EV 16 20.00 6.54
1169 Perl 16 25.75 12.62
1123 Event 16 81.27 35.86 1170 Event 16 81.27 35.86
1124 Glib 16 32.63 15.48 1171 Glib 16 32.63 15.48
1125 Perl 16 24.62 162.37
1126 POE 16 261.87 276.28 uses POE::Loop::Event 1172 POE 16 261.87 276.28 uses POE::Loop::Event
1127 1173
1128=head3 Discussion 1174=head3 Discussion
1129 1175
1130The benchmark tries to test the performance of a typical small 1176The benchmark tries to test the performance of a typical small
1131server. While knowing how various event loops perform is interesting, keep 1177server. While knowing how various event loops perform is interesting, keep
1132in 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
1133to 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).
1134 1182
1135EV is again fastest. 1183EV is again fastest.
1136 1184
1137The 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
1138overhead 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
1139code 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
1140high, and updating all the data structures is costly). 1188high, and updating all the data structures is costly).
1141 1189
1142The pure perl event loop is much slower, but still competitive. 1190The pure perl event loop is much slower, but still competitive.
1143 1191
1144POE 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
1145others. 1193others.
1146 1194
1147=head3 Summary 1195=head3 Summary
1148 1196
1149=over 4 1197=over 4

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines