… | |
… | |
369 | |
369 | |
370 | There is no support for WxWidgets, as WxWidgets has no support for |
370 | There is no support for WxWidgets, as WxWidgets has no support for |
371 | watching file handles. However, you can use WxWidgets through the |
371 | watching file handles. However, you can use WxWidgets through the |
372 | POE Adaptor, as POE has a Wx backend that simply polls 20 times per |
372 | POE Adaptor, as POE has a Wx backend that simply polls 20 times per |
373 | second, which was considered to be too horrible to even consider for |
373 | second, which was considered to be too horrible to even consider for |
374 | AnyEvent. Likewise, other POE backends can be used by Anyevent by using |
374 | AnyEvent. Likewise, other POE backends can be used by AnyEvent by using |
375 | it's adaptor. |
375 | it's adaptor. |
|
|
376 | |
|
|
377 | AnyEvent knows about L<Prima> and L<Wx> and will try to use L<POE> when |
|
|
378 | autodetecting them. |
376 | |
379 | |
377 | =item AnyEvent::detect |
380 | =item AnyEvent::detect |
378 | |
381 | |
379 | Returns C<$AnyEvent::MODEL>, forcing autodetection of the event model |
382 | Returns C<$AnyEvent::MODEL>, forcing autodetection of the event model |
380 | if necessary. You should only call this function right before you would |
383 | if necessary. You should only call this function right before you would |
… | |
… | |
431 | no warnings; |
434 | no warnings; |
432 | use strict; |
435 | use strict; |
433 | |
436 | |
434 | use Carp; |
437 | use Carp; |
435 | |
438 | |
436 | our $VERSION = '3.2'; |
439 | our $VERSION = '3.3'; |
437 | our $MODEL; |
440 | our $MODEL; |
438 | |
441 | |
439 | our $AUTOLOAD; |
442 | our $AUTOLOAD; |
440 | our @ISA; |
443 | our @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 | |
|
|
868 | To give you an idea of the performance and overheads that AnyEvent adds |
|
|
869 | over the backends directly, here is a benchmark of various supported event |
|
|
870 | models 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 |
|
|
872 | writable), lets them fire exactly once and destroys them again. |
|
|
873 | |
|
|
874 | Explanation of the fields: |
|
|
875 | |
|
|
876 | I<watcher> is the number of event watchers created/destroyed. Sicne |
|
|
877 | different event models have vastly different performance each backend was |
|
|
878 | handed a number of watchers so that overall runtime is acceptable and |
|
|
879 | similar to all backends (and keep them from crashing). |
|
|
880 | |
|
|
881 | I<bytes> is the number of bytes (as measured by resident set size) used by |
|
|
882 | each watcher. |
|
|
883 | |
|
|
884 | I<create> is the time, in microseconds, to create a single watcher. |
|
|
885 | |
|
|
886 | I<invoke> is the time, in microseconds, used to invoke a simple callback |
|
|
887 | that simply counts down. |
|
|
888 | |
|
|
889 | I<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 | |
|
|
903 | Discussion: The benchmark does I<not> bench scalability of the |
|
|
904 | backend. For example a select-based backend (such as the pureperl one) can |
|
|
905 | never compete with a backend using epoll. In this benchmark, only a single |
|
|
906 | filehandle is used. |
|
|
907 | |
|
|
908 | EV is the sole leader regarding speed and memory use, which are both |
|
|
909 | maximal/minimal. Even when going through AnyEvent, there is only one event |
|
|
910 | loop that uses less memory (the Event module natively), and no faster |
|
|
911 | event model. |
|
|
912 | |
|
|
913 | The pure perl implementation is hit in a few sweet spots (both the |
|
|
914 | zero timeout and the use of a single fd hit optimisations in the perl |
|
|
915 | interpreter and the backend itself), but it shows that it adds very little |
|
|
916 | overhead in itself. Like any select-based backend it's performance becomes |
|
|
917 | really bad with lots of file descriptors. |
|
|
918 | |
|
|
919 | The Event module has a relatively high setup and callback invocation cost, |
|
|
920 | but overall scores on the third place. |
|
|
921 | |
|
|
922 | Glib has a little higher memory cost, a bit fster callback invocation and |
|
|
923 | has a similar speed as Event. |
|
|
924 | |
|
|
925 | The Tk backend works relatively well, the fact that it crashes with |
|
|
926 | more than 2000 watchers is a big setback, however, as correctness takes |
|
|
927 | precedence over speed. |
|
|
928 | |
|
|
929 | POE, regardless of backend (wether it's pure perl select backend or the |
|
|
930 | Event backend) shows abysmal performance and memory usage: Watchers use |
|
|
931 | almost 30 times as much memory as EV watchers, and 10 times as much memory |
|
|
932 | as both Event or EV via AnyEvent. |
|
|
933 | |
|
|
934 | Summary: using EV through AnyEvent is faster than any other event |
|
|
935 | loop. The overhead AnyEvent adds can be very small, and you should avoid |
|
|
936 | POE like the plague if you want performance or reasonable memory usage. |
|
|
937 | |
|
|
938 | |
860 | =head1 FORK |
939 | =head1 FORK |
861 | |
940 | |
862 | Most event libraries are not fork-safe. The ones who are usually are |
941 | Most event libraries are not fork-safe. The ones who are usually are |
863 | because they are so inefficient. Only L<EV> is fully fork-aware. |
942 | because they are so inefficient. Only L<EV> is fully fork-aware. |
864 | |
943 | |
865 | If you have to fork, you must either do so I<before> creating your first |
944 | If you have to fork, you must either do so I<before> creating your first |
866 | watcher OR you must not use AnyEvent at all in the child. |
945 | watcher OR you must not use AnyEvent at all in the child. |
|
|
946 | |
867 | |
947 | |
868 | =head1 SECURITY CONSIDERATIONS |
948 | =head1 SECURITY CONSIDERATIONS |
869 | |
949 | |
870 | AnyEvent can be forced to load any event model via |
950 | AnyEvent 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 | |
886 | Event modules: L<Coro::EV>, L<EV>, L<EV::Glib>, L<Glib::EV>, |
967 | Event modules: L<Coro::EV>, L<EV>, L<EV::Glib>, L<Glib::EV>, |
887 | L<Coro::Event>, L<Event>, L<Glib::Event>, L<Glib>, L<Coro>, L<Tk>, |
968 | L<Coro::Event>, L<Event>, L<Glib::Event>, L<Glib>, L<Coro>, L<Tk>, |
888 | L<Event::Lib>, L<Qt>, L<POE>. |
969 | L<Event::Lib>, L<Qt>, L<POE>. |
… | |
… | |
892 | L<AnyEvent::Impl::Tk>, L<AnyEvent::Impl::Perl>, L<AnyEvent::Impl::EventLib>, |
973 | L<AnyEvent::Impl::Tk>, L<AnyEvent::Impl::Perl>, L<AnyEvent::Impl::EventLib>, |
893 | L<AnyEvent::Impl::Qt>, L<AnyEvent::Impl::POE>. |
974 | L<AnyEvent::Impl::Qt>, L<AnyEvent::Impl::POE>. |
894 | |
975 | |
895 | Nontrivial usage examples: L<Net::FCP>, L<Net::XMPP2>. |
976 | Nontrivial 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 | |