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.63 by root, Fri Apr 25 02:03:38 2008 UTC vs.
Revision 1.64 by root, Fri Apr 25 06:54:08 2008 UTC

860 $quit->broadcast; 860 $quit->broadcast;
861 }); 861 });
862 862
863 $quit->wait; 863 $quit->wait;
864 864
865
866=head1 BENCHMARK
867
868To give you an idea of the performance an doverheads that AnyEvent adds
869over the backends, here is a benchmark of various supported backends. The
870benchmark creates a lot of timers (with zero timeout) and io events
871(watching STDOUT, a pty, to become writable).
872
873Explanation of the fields:
874
875I<watcher> is the number of event watchers created/destroyed. Sicne
876different event models have vastly different performance each backend was
877handed a number of watchers so that overall runtime is acceptable and
878similar to all backends (and keep them from crashing).
879
880I<bytes> is the number of bytes (as measured by resident set size) used by
881each watcher.
882
883I<create> is the time, in microseconds, to create a single watcher.
884
885I<invoke> is the time, in microseconds, used to invoke a simple callback
886that simply counts down.
887
888I<destroy> is the time, in microseconds, to destroy a single watcher.
889
890 name watcher bytes create invoke destroy comment
891 EV/EV 400000 244 0.56 0.46 0.31 EV native interface
892 EV/Any 100000 610 3.52 0.91 0.75
893 CoroEV/Any 100000 610 3.49 0.92 0.75 coroutines + Coro::Signal
894 Perl/Any 10000 654 4.64 1.22 0.77 pure perl implementation
895 Event/Event 10000 523 28.05 21.38 5.22 Event native interface
896 Event/Any 10000 943 34.43 20.48 1.39
897 Glib/Any 16000 1357 96.99 12.55 55.51 quadratic behaviour
898 Tk/Any 2000 1855 27.01 66.61 14.03 SEGV with >> 2000 watchers
899 POE/Select 2000 6343 94.69 807.65 562.69 POE::Loop::Select
900 POE/Event 2000 6644 108.15 768.19 14.33 POE::Loop::Event
901
902Discussion: The benchmark does I<not> bench scalability of the
903backend. For example a select-based backend (such as the pureperl one) can
904never compete with a backend using epoll. In this benchmark, only a single
905filehandle is used.
906
907EV is the sole leader regarding speed and memory use, which are both
908maximal/minimal. Even when going through AnyEvent, there is only one event
909loop that uses less memory (the Event module natively), and no faster
910event model.
911
912The pure perl implementation is hit in a few sweet spots (both the
913zero timeout and the use of a single fd hit optimisations in the perl
914interpreter and the backend itself), but it shows that it adds very little
915overhead in itself. Like any select-based backend it's performance becomes
916really bad with lots of file descriptors.
917
918The Event module has a relatively high setup and callback invocation cost,
919but overall scores on the third place.
920
921Glib has a little higher memory cost, a bit fster callback invocation and
922has a similar speed as Event.
923
924The Tk backend works relatively well, the fact that it crashes with
925more than 2000 watchers is a big setback, however, as correctness takes
926precedence over speed.
927
928POE, regardless of backend (wether it's pure perl select backend or the
929Event backend) shows abysmal performance and memory usage: Watchers use
930almost 30 times as much memory as EV watchers, and 10 times as much memory
931as both Event or EV via AnyEvent.
932
933Summary: using EV through AnyEvent is faster than any other event
934loop. The overhead AnyEvent adds can be very small, and you should avoid
935POE like the plague if you want performance or reasonable memory usage.
936
937
865=head1 FORK 938=head1 FORK
866 939
867Most event libraries are not fork-safe. The ones who are usually are 940Most event libraries are not fork-safe. The ones who are usually are
868because they are so inefficient. Only L<EV> is fully fork-aware. 941because they are so inefficient. Only L<EV> is fully fork-aware.
869 942
870If you have to fork, you must either do so I<before> creating your first 943If you have to fork, you must either do so I<before> creating your first
871watcher OR you must not use AnyEvent at all in the child. 944watcher OR you must not use AnyEvent at all in the child.
945
872 946
873=head1 SECURITY CONSIDERATIONS 947=head1 SECURITY CONSIDERATIONS
874 948
875AnyEvent can be forced to load any event model via 949AnyEvent can be forced to load any event model via
876$ENV{PERL_ANYEVENT_MODEL}. While this cannot (to my knowledge) be used to 950$ENV{PERL_ANYEVENT_MODEL}. While this cannot (to my knowledge) be used to
884 958
885 BEGIN { delete $ENV{PERL_ANYEVENT_MODEL} } 959 BEGIN { delete $ENV{PERL_ANYEVENT_MODEL} }
886 960
887 use AnyEvent; 961 use AnyEvent;
888 962
963
889=head1 SEE ALSO 964=head1 SEE ALSO
890 965
891Event modules: L<Coro::EV>, L<EV>, L<EV::Glib>, L<Glib::EV>, 966Event modules: L<Coro::EV>, L<EV>, L<EV::Glib>, L<Glib::EV>,
892L<Coro::Event>, L<Event>, L<Glib::Event>, L<Glib>, L<Coro>, L<Tk>, 967L<Coro::Event>, L<Event>, L<Glib::Event>, L<Glib>, L<Coro>, L<Tk>,
893L<Event::Lib>, L<Qt>, L<POE>. 968L<Event::Lib>, L<Qt>, L<POE>.
897L<AnyEvent::Impl::Tk>, L<AnyEvent::Impl::Perl>, L<AnyEvent::Impl::EventLib>, 972L<AnyEvent::Impl::Tk>, L<AnyEvent::Impl::Perl>, L<AnyEvent::Impl::EventLib>,
898L<AnyEvent::Impl::Qt>, L<AnyEvent::Impl::POE>. 973L<AnyEvent::Impl::Qt>, L<AnyEvent::Impl::POE>.
899 974
900Nontrivial usage examples: L<Net::FCP>, L<Net::XMPP2>. 975Nontrivial usage examples: L<Net::FCP>, L<Net::XMPP2>.
901 976
977
902=head1 AUTHOR 978=head1 AUTHOR
903 979
904 Marc Lehmann <schmorp@schmorp.de> 980 Marc Lehmann <schmorp@schmorp.de>
905 http://home.schmorp.de/ 981 http://home.schmorp.de/
906 982

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines