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.61 by root, Fri Apr 25 01:55:25 2008 UTC vs.
Revision 1.65 by root, Fri Apr 25 06:58:12 2008 UTC

369 369
370There is no support for WxWidgets, as WxWidgets has no support for 370There is no support for WxWidgets, as WxWidgets has no support for
371watching file handles. However, you can use WxWidgets through the 371watching file handles. However, you can use WxWidgets through the
372POE Adaptor, as POE has a Wx backend that simply polls 20 times per 372POE Adaptor, as POE has a Wx backend that simply polls 20 times per
373second, which was considered to be too horrible to even consider for 373second, which was considered to be too horrible to even consider for
374AnyEvent. Likewise, other POE backends can be used by Anyevent by using 374AnyEvent. Likewise, other POE backends can be used by AnyEvent by using
375it's adaptor. 375it's adaptor.
376
377AnyEvent knows about L<Prima> and L<Wx> and will try to use L<POE> when
378autodetecting them.
376 379
377=item AnyEvent::detect 380=item AnyEvent::detect
378 381
379Returns C<$AnyEvent::MODEL>, forcing autodetection of the event model 382Returns C<$AnyEvent::MODEL>, forcing autodetection of the event model
380if necessary. You should only call this function right before you would 383if necessary. You should only call this function right before you would
431no warnings; 434no warnings;
432use strict; 435use strict;
433 436
434use Carp; 437use Carp;
435 438
436our $VERSION = '3.2'; 439our $VERSION = '3.3';
437our $MODEL; 440our $MODEL;
438 441
439our $AUTOLOAD; 442our $AUTOLOAD;
440our @ISA; 443our @ISA;
441 444
448 [Coro::Event:: => AnyEvent::Impl::CoroEvent::], 451 [Coro::Event:: => AnyEvent::Impl::CoroEvent::],
449 [EV:: => AnyEvent::Impl::EV::], 452 [EV:: => AnyEvent::Impl::EV::],
450 [Event:: => AnyEvent::Impl::Event::], 453 [Event:: => AnyEvent::Impl::Event::],
451 [Glib:: => AnyEvent::Impl::Glib::], 454 [Glib:: => AnyEvent::Impl::Glib::],
452 [Tk:: => AnyEvent::Impl::Tk::], 455 [Tk:: => AnyEvent::Impl::Tk::],
456 [Wx:: => AnyEvent::Impl::POE::],
457 [Prima:: => AnyEvent::Impl::POE::],
453 [AnyEvent::Impl::Perl:: => AnyEvent::Impl::Perl::], 458 [AnyEvent::Impl::Perl:: => AnyEvent::Impl::Perl::],
454 # everything below here will not be autoprobed as the pureperl backend should work everywhere 459 # everything below here will not be autoprobed as the pureperl backend should work everywhere
455 [Event::Lib:: => AnyEvent::Impl::EventLib::], # too buggy 460 [Event::Lib:: => AnyEvent::Impl::EventLib::], # too buggy
456 [Qt:: => AnyEvent::Impl::Qt::], # requires special main program 461 [Qt:: => AnyEvent::Impl::Qt::], # requires special main program
457 [POE::Kernel:: => AnyEvent::Impl::POE::], # lasciate ogni speranza 462 [POE::Kernel:: => AnyEvent::Impl::POE::], # lasciate ogni speranza
855 $quit->broadcast; 860 $quit->broadcast;
856 }); 861 });
857 862
858 $quit->wait; 863 $quit->wait;
859 864
865
866=head1 BENCHMARK
867
868To give you an idea of the performance and overheads that AnyEvent adds
869over the backends directly, here is a benchmark of various supported event
870models natively and with anyevent. The benchmark creates a lot of timers
871(with a zero timeout) and io events (watching STDOUT, a pty, to become
872writable), lets them fire exactly once and destroys them again.
873
874Explanation of the fields:
875
876I<watcher> is the number of event watchers created/destroyed. Sicne
877different event models have vastly different performance each backend was
878handed a number of watchers so that overall runtime is acceptable and
879similar to all backends (and keep them from crashing).
880
881I<bytes> is the number of bytes (as measured by resident set size) used by
882each watcher.
883
884I<create> is the time, in microseconds, to create a single watcher.
885
886I<invoke> is the time, in microseconds, used to invoke a simple callback
887that simply counts down.
888
889I<destroy> is the time, in microseconds, to destroy a single watcher.
890
891 name watcher bytes create invoke destroy comment
892 EV/EV 400000 244 0.56 0.46 0.31 EV native interface
893 EV/Any 100000 610 3.52 0.91 0.75
894 CoroEV/Any 100000 610 3.49 0.92 0.75 coroutines + Coro::Signal
895 Perl/Any 10000 654 4.64 1.22 0.77 pure perl implementation
896 Event/Event 10000 523 28.05 21.38 5.22 Event native interface
897 Event/Any 10000 943 34.43 20.48 1.39
898 Glib/Any 16000 1357 96.99 12.55 55.51 quadratic behaviour
899 Tk/Any 2000 1855 27.01 66.61 14.03 SEGV with >> 2000 watchers
900 POE/Select 2000 6343 94.69 807.65 562.69 POE::Loop::Select
901 POE/Event 2000 6644 108.15 768.19 14.33 POE::Loop::Event
902
903Discussion: The benchmark does I<not> bench scalability of the
904backend. For example a select-based backend (such as the pureperl one) can
905never compete with a backend using epoll. In this benchmark, only a single
906filehandle is used.
907
908EV is the sole leader regarding speed and memory use, which are both
909maximal/minimal. Even when going through AnyEvent, there is only one event
910loop that uses less memory (the Event module natively), and no faster
911event model.
912
913The pure perl implementation is hit in a few sweet spots (both the
914zero timeout and the use of a single fd hit optimisations in the perl
915interpreter and the backend itself), but it shows that it adds very little
916overhead in itself. Like any select-based backend it's performance becomes
917really bad with lots of file descriptors.
918
919The Event module has a relatively high setup and callback invocation cost,
920but overall scores on the third place.
921
922Glib has a little higher memory cost, a bit fster callback invocation and
923has a similar speed as Event.
924
925The Tk backend works relatively well, the fact that it crashes with
926more than 2000 watchers is a big setback, however, as correctness takes
927precedence over speed.
928
929POE, regardless of backend (wether it's pure perl select backend or the
930Event backend) shows abysmal performance and memory usage: Watchers use
931almost 30 times as much memory as EV watchers, and 10 times as much memory
932as both Event or EV via AnyEvent.
933
934Summary: using EV through AnyEvent is faster than any other event
935loop. The overhead AnyEvent adds can be very small, and you should avoid
936POE like the plague if you want performance or reasonable memory usage.
937
938
860=head1 FORK 939=head1 FORK
861 940
862Most event libraries are not fork-safe. The ones who are usually are 941Most event libraries are not fork-safe. The ones who are usually are
863because they are so inefficient. Only L<EV> is fully fork-aware. 942because they are so inefficient. Only L<EV> is fully fork-aware.
864 943
865If you have to fork, you must either do so I<before> creating your first 944If you have to fork, you must either do so I<before> creating your first
866watcher OR you must not use AnyEvent at all in the child. 945watcher OR you must not use AnyEvent at all in the child.
946
867 947
868=head1 SECURITY CONSIDERATIONS 948=head1 SECURITY CONSIDERATIONS
869 949
870AnyEvent can be forced to load any event model via 950AnyEvent can be forced to load any event model via
871$ENV{PERL_ANYEVENT_MODEL}. While this cannot (to my knowledge) be used to 951$ENV{PERL_ANYEVENT_MODEL}. While this cannot (to my knowledge) be used to
879 959
880 BEGIN { delete $ENV{PERL_ANYEVENT_MODEL} } 960 BEGIN { delete $ENV{PERL_ANYEVENT_MODEL} }
881 961
882 use AnyEvent; 962 use AnyEvent;
883 963
964
884=head1 SEE ALSO 965=head1 SEE ALSO
885 966
886Event modules: L<Coro::EV>, L<EV>, L<EV::Glib>, L<Glib::EV>, 967Event modules: L<Coro::EV>, L<EV>, L<EV::Glib>, L<Glib::EV>,
887L<Coro::Event>, L<Event>, L<Glib::Event>, L<Glib>, L<Coro>, L<Tk>, 968L<Coro::Event>, L<Event>, L<Glib::Event>, L<Glib>, L<Coro>, L<Tk>,
888L<Event::Lib>, L<Qt>, L<POE>. 969L<Event::Lib>, L<Qt>, L<POE>.
892L<AnyEvent::Impl::Tk>, L<AnyEvent::Impl::Perl>, L<AnyEvent::Impl::EventLib>, 973L<AnyEvent::Impl::Tk>, L<AnyEvent::Impl::Perl>, L<AnyEvent::Impl::EventLib>,
893L<AnyEvent::Impl::Qt>, L<AnyEvent::Impl::POE>. 974L<AnyEvent::Impl::Qt>, L<AnyEvent::Impl::POE>.
894 975
895Nontrivial usage examples: L<Net::FCP>, L<Net::XMPP2>. 976Nontrivial usage examples: L<Net::FCP>, L<Net::XMPP2>.
896 977
978
897=head1 AUTHOR 979=head1 AUTHOR
898 980
899 Marc Lehmann <schmorp@schmorp.de> 981 Marc Lehmann <schmorp@schmorp.de>
900 http://home.schmorp.de/ 982 http://home.schmorp.de/
901 983

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines