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.64 by root, Fri Apr 25 06:54:08 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 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
860=head1 FORK 938=head1 FORK
861 939
862Most 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
863because they are so inefficient. Only L<EV> is fully fork-aware. 941because they are so inefficient. Only L<EV> is fully fork-aware.
864 942
865If 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
866watcher OR you must not use AnyEvent at all in the child. 944watcher OR you must not use AnyEvent at all in the child.
945
867 946
868=head1 SECURITY CONSIDERATIONS 947=head1 SECURITY CONSIDERATIONS
869 948
870AnyEvent can be forced to load any event model via 949AnyEvent can be forced to load any event model via
871$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
879 958
880 BEGIN { delete $ENV{PERL_ANYEVENT_MODEL} } 959 BEGIN { delete $ENV{PERL_ANYEVENT_MODEL} }
881 960
882 use AnyEvent; 961 use AnyEvent;
883 962
963
884=head1 SEE ALSO 964=head1 SEE ALSO
885 965
886Event 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>,
887L<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>,
888L<Event::Lib>, L<Qt>, L<POE>. 968L<Event::Lib>, L<Qt>, L<POE>.
892L<AnyEvent::Impl::Tk>, L<AnyEvent::Impl::Perl>, L<AnyEvent::Impl::EventLib>, 972L<AnyEvent::Impl::Tk>, L<AnyEvent::Impl::Perl>, L<AnyEvent::Impl::EventLib>,
893L<AnyEvent::Impl::Qt>, L<AnyEvent::Impl::POE>. 973L<AnyEvent::Impl::Qt>, L<AnyEvent::Impl::POE>.
894 974
895Nontrivial usage examples: L<Net::FCP>, L<Net::XMPP2>. 975Nontrivial usage examples: L<Net::FCP>, L<Net::XMPP2>.
896 976
977
897=head1 AUTHOR 978=head1 AUTHOR
898 979
899 Marc Lehmann <schmorp@schmorp.de> 980 Marc Lehmann <schmorp@schmorp.de>
900 http://home.schmorp.de/ 981 http://home.schmorp.de/
901 982

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines