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.217 by root, Tue Jun 23 23:37:32 2009 UTC vs.
Revision 1.219 by root, Thu Jun 25 11:16:08 2009 UTC

392 392
393There is a slight catch to child watchers, however: you usually start them 393There is a slight catch to child watchers, however: you usually start them
394I<after> the child process was created, and this means the process could 394I<after> the child process was created, and this means the process could
395have exited already (and no SIGCHLD will be sent anymore). 395have exited already (and no SIGCHLD will be sent anymore).
396 396
397Not all event models handle this correctly (POE doesn't), but even for 397Not all event models handle this correctly (neither POE nor IO::Async do,
398see their AnyEvent::Impl manpages for details), but even for event models
398event models that I<do> handle this correctly, they usually need to be 399that I<do> handle this correctly, they usually need to be loaded before
399loaded before the process exits (i.e. before you fork in the first place). 400the process exits (i.e. before you fork in the first place). AnyEvent's
401pure perl event loop handles all cases correctly regardless of when you
402start the watcher.
400 403
401This means you cannot create a child watcher as the very first thing in an 404This means you cannot create a child watcher as the very first
402AnyEvent program, you I<have> to create at least one watcher before you 405thing in an AnyEvent program, you I<have> to create at least one
403C<fork> the child (alternatively, you can call C<AnyEvent::detect>). 406watcher before you C<fork> the child (alternatively, you can call
407C<AnyEvent::detect>).
404 408
405Example: fork a process and wait for it 409Example: fork a process and wait for it
406 410
407 my $done = AnyEvent->condvar; 411 my $done = AnyEvent->condvar;
408 412
730 AnyEvent::Impl::Tk based on Tk, very bad choice. 734 AnyEvent::Impl::Tk based on Tk, very bad choice.
731 AnyEvent::Impl::Qt based on Qt, cannot be autoprobed (see its docs). 735 AnyEvent::Impl::Qt based on Qt, cannot be autoprobed (see its docs).
732 AnyEvent::Impl::EventLib based on Event::Lib, leaks memory and worse. 736 AnyEvent::Impl::EventLib based on Event::Lib, leaks memory and worse.
733 AnyEvent::Impl::POE based on POE, not generic enough for full support. 737 AnyEvent::Impl::POE based on POE, not generic enough for full support.
734 738
739 # warning, support for IO::Async is only partial, as it is too broken
740 # and limited toe ven support the AnyEvent API. See AnyEvent::Impl::Async.
741 AnyEvent::Impl::IOAsync based on IO::Async, cannot be autoprobed (see its docs).
742
735There is no support for WxWidgets, as WxWidgets has no support for 743There is no support for WxWidgets, as WxWidgets has no support for
736watching file handles. However, you can use WxWidgets through the 744watching file handles. However, you can use WxWidgets through the
737POE Adaptor, as POE has a Wx backend that simply polls 20 times per 745POE Adaptor, as POE has a Wx backend that simply polls 20 times per
738second, which was considered to be too horrible to even consider for 746second, which was considered to be too horrible to even consider for
739AnyEvent. Likewise, other POE backends can be used by AnyEvent by using 747AnyEvent. Likewise, other POE backends can be used by AnyEvent by using
974 [Event::Lib:: => AnyEvent::Impl::EventLib::], # too buggy 982 [Event::Lib:: => AnyEvent::Impl::EventLib::], # too buggy
975 [Qt:: => AnyEvent::Impl::Qt::], # requires special main program 983 [Qt:: => AnyEvent::Impl::Qt::], # requires special main program
976 [POE::Kernel:: => AnyEvent::Impl::POE::], # lasciate ogni speranza 984 [POE::Kernel:: => AnyEvent::Impl::POE::], # lasciate ogni speranza
977 [Wx:: => AnyEvent::Impl::POE::], 985 [Wx:: => AnyEvent::Impl::POE::],
978 [Prima:: => AnyEvent::Impl::POE::], 986 [Prima:: => AnyEvent::Impl::POE::],
987 # IO::Async is just too broken - we would need workaorunds for its
988 # byzantine signal and broken child handling, among others.
989 # IO::Async is rather hard to detect, as it doesn't have any
990 # obvious default class.
991# [IO::Async:: => AnyEvent::Impl::IOAsync::], # requires special main program
992# [IO::Async::Loop:: => AnyEvent::Impl::IOAsync::], # requires special main program
993# [IO::Async::Notifier:: => AnyEvent::Impl::IOAsync::], # requires special main program
979); 994);
980 995
981our %method = map +($_ => 1), 996our %method = map +($_ => 1),
982 qw(io timer time now now_update signal child idle condvar one_event DESTROY); 997 qw(io timer time now now_update signal child idle condvar one_event DESTROY);
983 998
1075} 1090}
1076 1091
1077# utility function to dup a filehandle. this is used by many backends 1092# utility function to dup a filehandle. this is used by many backends
1078# to support binding more than one watcher per filehandle (they usually 1093# to support binding more than one watcher per filehandle (they usually
1079# allow only one watcher per fd, so we dup it to get a different one). 1094# allow only one watcher per fd, so we dup it to get a different one).
1080sub _dupfh($$$$) { 1095sub _dupfh($$;$$) {
1081 my ($poll, $fh, $r, $w) = @_; 1096 my ($poll, $fh, $r, $w) = @_;
1082 1097
1083 # cygwin requires the fh mode to be matching, unix doesn't 1098 # cygwin requires the fh mode to be matching, unix doesn't
1084 my ($rw, $mode) = $poll eq "r" ? ($r, "<") 1099 my ($rw, $mode) = $poll eq "r" ? ($r, "<")
1085 : $poll eq "w" ? ($w, ">") 1100 : $poll eq "w" ? ($w, ">")
1366=item C<PERL_ANYEVENT_STRICT> 1381=item C<PERL_ANYEVENT_STRICT>
1367 1382
1368AnyEvent does not do much argument checking by default, as thorough 1383AnyEvent does not do much argument checking by default, as thorough
1369argument checking is very costly. Setting this variable to a true value 1384argument checking is very costly. Setting this variable to a true value
1370will cause AnyEvent to load C<AnyEvent::Strict> and then to thoroughly 1385will cause AnyEvent to load C<AnyEvent::Strict> and then to thoroughly
1371check the arguments passed to most method calls. If it finds any problems 1386check the arguments passed to most method calls. If it finds any problems,
1372it will croak. 1387it will croak.
1373 1388
1374In other words, enables "strict" mode. 1389In other words, enables "strict" mode.
1375 1390
1376Unlike C<use strict>, it is definitely recommended ot keep it off in 1391Unlike C<use strict>, it is definitely recommended to keep it off in
1377production. Keeping C<PERL_ANYEVENT_STRICT=1> in your environment while 1392production. Keeping C<PERL_ANYEVENT_STRICT=1> in your environment while
1378developing programs can be very useful, however. 1393developing programs can be very useful, however.
1379 1394
1380=item C<PERL_ANYEVENT_MODEL> 1395=item C<PERL_ANYEVENT_MODEL>
1381 1396
1900 1915
1901Recently I was told about the benchmark in the IO::Lambda manpage, which 1916Recently I was told about the benchmark in the IO::Lambda manpage, which
1902could be misinterpreted to make AnyEvent look bad. In fact, the benchmark 1917could be misinterpreted to make AnyEvent look bad. In fact, the benchmark
1903simply compares IO::Lambda with POE, and IO::Lambda looks better (which 1918simply compares IO::Lambda with POE, and IO::Lambda looks better (which
1904shouldn't come as a surprise to anybody). As such, the benchmark is 1919shouldn't come as a surprise to anybody). As such, the benchmark is
1905fine, and shows that the AnyEvent backend from IO::Lambda isn't very 1920fine, and mostly shows that the AnyEvent backend from IO::Lambda isn't
1906optimal. But how would AnyEvent compare when used without the extra 1921very optimal. But how would AnyEvent compare when used without the extra
1907baggage? To explore this, I wrote the equivalent benchmark for AnyEvent. 1922baggage? To explore this, I wrote the equivalent benchmark for AnyEvent.
1908 1923
1909The benchmark itself creates an echo-server, and then, for 500 times, 1924The benchmark itself creates an echo-server, and then, for 500 times,
1910connects to the echo server, sends a line, waits for the reply, and then 1925connects to the echo server, sends a line, waits for the reply, and then
1911creates the next connection. This is a rather bad benchmark, as it doesn't 1926creates the next connection. This is a rather bad benchmark, as it doesn't
1912test the efficiency of the framework, but it is a benchmark nevertheless. 1927test the efficiency of the framework or much non-blocking I/O, but it is a
1928benchmark nevertheless.
1913 1929
1914 name runtime 1930 name runtime
1915 Lambda/select 0.330 sec 1931 Lambda/select 0.330 sec
1916 + optimized 0.122 sec 1932 + optimized 0.122 sec
1917 Lambda/AnyEvent 0.327 sec 1933 Lambda/AnyEvent 0.327 sec
1923 1939
1924 AnyEvent/select/nb 0.085 sec 1940 AnyEvent/select/nb 0.085 sec
1925 AnyEvent/EV/nb 0.068 sec 1941 AnyEvent/EV/nb 0.068 sec
1926 +state machine 0.134 sec 1942 +state machine 0.134 sec
1927 1943
1928The benchmark is also a bit unfair (my fault) - the IO::Lambda 1944The benchmark is also a bit unfair (my fault): the IO::Lambda/POE
1929benchmarks actually make blocking connects and use 100% blocking I/O, 1945benchmarks actually make blocking connects and use 100% blocking I/O,
1930defeating the purpose of an event-based solution. All of the newly 1946defeating the purpose of an event-based solution. All of the newly
1931written AnyEvent benchmarks use 100% non-blocking connects (using 1947written AnyEvent benchmarks use 100% non-blocking connects (using
1932AnyEvent::Socket::tcp_connect and the asynchronous pure perl DNS 1948AnyEvent::Socket::tcp_connect and the asynchronous pure perl DNS
1933resolver), so AnyEvent is at a disadvantage here as non-blocking connects 1949resolver), so AnyEvent is at a disadvantage here, as non-blocking connects
1934generally require a lot more bookkeeping and event handling than blocking 1950generally require a lot more bookkeeping and event handling than blocking
1935connects (which involve a single syscall only). 1951connects (which involve a single syscall only).
1936 1952
1937The last AnyEvent benchmark additionally uses L<AnyEvent::Handle>, which 1953The last AnyEvent benchmark additionally uses L<AnyEvent::Handle>, which
1938offers similar expressive power as POE and IO::Lambda (using conventional 1954offers similar expressive power as POE and IO::Lambda, using conventional
1939Perl syntax), which means both the echo server and the client are 100% 1955Perl syntax. This means that both the echo server and the client are 100%
1940non-blocking w.r.t. I/O, further placing it at a disadvantage. 1956non-blocking, further placing it at a disadvantage.
1941 1957
1942As you can see, AnyEvent + EV even beats the hand-optimised "raw sockets 1958As you can see, the AnyEvent + EV combination even beats the
1943benchmark", while AnyEvent + its pure perl backend easily beats 1959hand-optimised "raw sockets benchmark", while AnyEvent + its pure perl
1944IO::Lambda and POE. 1960backend easily beats IO::Lambda and POE.
1945 1961
1946And even the 100% non-blocking version written using the high-level (and 1962And even the 100% non-blocking version written using the high-level (and
1947slow :) L<AnyEvent::Handle> abstraction beats both POE and IO::Lambda, 1963slow :) L<AnyEvent::Handle> abstraction beats both POE and IO::Lambda by a
1948even thought it does all of DNS, tcp-connect and socket I/O in a 1964large margin, even though it does all of DNS, tcp-connect and socket I/O
1949non-blocking way. 1965in a non-blocking way.
1950 1966
1951The two AnyEvent benchmarks can be found as F<eg/ae0.pl> and F<eg/ae2.pl> 1967The two AnyEvent benchmarks programs can be found as F<eg/ae0.pl> and
1952in the AnyEvent distribution, the remaining benchmarks are part of the 1968F<eg/ae2.pl> in the AnyEvent distribution, the remaining benchmarks are
1953IO::lambda distribution and were used without any changes. 1969part of the IO::lambda distribution and were used without any changes.
1954 1970
1955 1971
1956=head1 SIGNALS 1972=head1 SIGNALS
1957 1973
1958AnyEvent currently installs handlers for these signals: 1974AnyEvent currently installs handlers for these signals:
1962=item SIGCHLD 1978=item SIGCHLD
1963 1979
1964A handler for C<SIGCHLD> is installed by AnyEvent's child watcher 1980A handler for C<SIGCHLD> is installed by AnyEvent's child watcher
1965emulation for event loops that do not support them natively. Also, some 1981emulation for event loops that do not support them natively. Also, some
1966event loops install a similar handler. 1982event loops install a similar handler.
1983
1984If, when AnyEvent is loaded, SIGCHLD is set to IGNORE, then AnyEvent will
1985reset it to default, to avoid losing child exit statuses.
1967 1986
1968=item SIGPIPE 1987=item SIGPIPE
1969 1988
1970A no-op handler is installed for C<SIGPIPE> when C<$SIG{PIPE}> is C<undef> 1989A no-op handler is installed for C<SIGPIPE> when C<$SIG{PIPE}> is C<undef>
1971when AnyEvent gets loaded. 1990when AnyEvent gets loaded.
1983 2002
1984=back 2003=back
1985 2004
1986=cut 2005=cut
1987 2006
2007undef $SIG{CHLD}
2008 if $SIG{CHLD} eq 'IGNORE';
2009
1988$SIG{PIPE} = sub { } 2010$SIG{PIPE} = sub { }
1989 unless defined $SIG{PIPE}; 2011 unless defined $SIG{PIPE};
1990
1991 2012
1992=head1 FORK 2013=head1 FORK
1993 2014
1994Most event libraries are not fork-safe. The ones who are usually are 2015Most event libraries are not fork-safe. The ones who are usually are
1995because they rely on inefficient but fork-safe C<select> or C<poll> 2016because they rely on inefficient but fork-safe C<select> or C<poll>
2018Similar considerations apply to $ENV{PERL_ANYEVENT_VERBOSE}, as that can 2039Similar considerations apply to $ENV{PERL_ANYEVENT_VERBOSE}, as that can
2019be used to probe what backend is used and gain other information (which is 2040be used to probe what backend is used and gain other information (which is
2020probably even less useful to an attacker than PERL_ANYEVENT_MODEL), and 2041probably even less useful to an attacker than PERL_ANYEVENT_MODEL), and
2021$ENV{PERL_ANYEVENT_STRICT}. 2042$ENV{PERL_ANYEVENT_STRICT}.
2022 2043
2044Note that AnyEvent will remove I<all> environment variables starting with
2045C<PERL_ANYEVENT_> from C<%ENV> when it is loaded while taint mode is
2046enabled.
2047
2023 2048
2024=head1 BUGS 2049=head1 BUGS
2025 2050
2026Perl 5.8 has numerous memleaks that sometimes hit this module and are hard 2051Perl 5.8 has numerous memleaks that sometimes hit this module and are hard
2027to work around. If you suffer from memleaks, first upgrade to Perl 5.10 2052to work around. If you suffer from memleaks, first upgrade to Perl 5.10

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines