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.98 by root, Sun Apr 27 16:31:48 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
944 EV/EV 400000 244 0.56 0.46 0.31 EV native interface 963 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 964 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 965 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 966 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 967 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 968 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 969 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 970 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 971 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 972 POE/Select 2000 6343 94.13 809.12 565.96 via POE::Loop::Select
954 973
958well. For example, a select-based event loop (such as the pure perl one) 977well. 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 978can 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 979file descriptors grows high. In this benchmark, all events become ready at
961the same time, so select/poll-based implementations get an unnatural speed 980the same time, so select/poll-based implementations get an unnatural speed
962boost. 981boost.
982
983Also, note that the number of watchers usually has a nonlinear effect on
984overall speed, that is, creating twice as many watchers doesn't take twice
985the time - usually it takes longer. This puts event loops tested with a
986higher number of watchers at a disadvantage.
987
988To put the range of results into perspective, consider that on the
989benchmark machine, handling an event takes roughly 1600 CPU cycles with
990EV, 3100 CPU cycles with AnyEvent's pure perl loop and almost 3000000 CPU
991cycles with POE.
963 992
964C<EV> is the sole leader regarding speed and memory use, which are both 993C<EV> is the sole leader regarding speed and memory use, which are both
965maximal/minimal, respectively. Even when going through AnyEvent, it uses 994maximal/minimal, respectively. Even when going through AnyEvent, it uses
966far less memory than any other event loop and is still faster than Event 995far less memory than any other event loop and is still faster than Event
967natively. 996natively.
1123=head3 Discussion 1152=head3 Discussion
1124 1153
1125The benchmark tries to test the performance of a typical small 1154The benchmark tries to test the performance of a typical small
1126server. While knowing how various event loops perform is interesting, keep 1155server. While knowing how various event loops perform is interesting, keep
1127in mind that their overhead in this case is usually not as important, due 1156in mind that their overhead in this case is usually not as important, due
1128to the small absolute number of watchers. 1157to the small absolute number of watchers (that is, you need efficiency and
1158speed most when you have lots of watchers, not when you only have a few of
1159them).
1129 1160
1130EV is again fastest. 1161EV is again fastest.
1131 1162
1132The C-based event loops Event and Glib come in second this time, as the 1163The 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 1164overhead 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 1165code to execute in the inner loop, and perl's function calling overhead is
1135high, and updating all the data structures is costly). 1166high, and updating all the data structures is costly).
1136 1167
1137The pure perl event loop is much slower, but still competitive. 1168The pure perl event loop is much slower, but still competitive.
1138 1169
1139POE also performs much better in this case, but is is stillf ar behind the 1170POE also performs much better in this case, but is is still far behind the
1140others. 1171others.
1141 1172
1142=head3 Summary 1173=head3 Summary
1143 1174
1144=over 4 1175=over 4

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines