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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines