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.181 by root, Sat Sep 6 10:54:32 2008 UTC vs.
Revision 1.186 by root, Mon Oct 27 02:58:19 2008 UTC

825=item L<AnyEvent::IGS> 825=item L<AnyEvent::IGS>
826 826
827A non-blocking interface to the Internet Go Server protocol (used by 827A non-blocking interface to the Internet Go Server protocol (used by
828L<App::IGS>). 828L<App::IGS>).
829 829
830=item L<Net::IRC3> 830=item L<AnyEvent::IRC>
831 831
832AnyEvent based IRC client module family. 832AnyEvent based IRC client module family (replacing the older Net::IRC3).
833 833
834=item L<Net::XMPP2> 834=item L<Net::XMPP2>
835 835
836AnyEvent based XMPP (Jabber protocol) module family. 836AnyEvent based XMPP (Jabber protocol) module family.
837 837
861no warnings; 861no warnings;
862use strict qw(vars subs); 862use strict qw(vars subs);
863 863
864use Carp; 864use Carp;
865 865
866our $VERSION = 4.234; 866our $VERSION = 4.3;
867our $MODEL; 867our $MODEL;
868 868
869our $AUTOLOAD; 869our $AUTOLOAD;
870our @ISA; 870our @ISA;
871 871
1028BEGIN { 1028BEGIN {
1029 if (eval "use Time::HiRes (); time (); 1") { 1029 if (eval "use Time::HiRes (); time (); 1") {
1030 *_time = \&Time::HiRes::time; 1030 *_time = \&Time::HiRes::time;
1031 # if (eval "use POSIX (); (POSIX::times())... 1031 # if (eval "use POSIX (); (POSIX::times())...
1032 } else { 1032 } else {
1033 *_time = \&CORE::time; # epic fail 1033 *_time = sub { time }; # epic fail
1034 } 1034 }
1035} 1035}
1036 1036
1037sub time { _time } 1037sub time { _time }
1038sub now { _time } 1038sub now { _time }
1533watcher. 1533watcher.
1534 1534
1535=head3 Results 1535=head3 Results
1536 1536
1537 name watchers bytes create invoke destroy comment 1537 name watchers bytes create invoke destroy comment
1538 EV/EV 400000 244 0.56 0.46 0.31 EV native interface 1538 EV/EV 400000 224 0.47 0.43 0.27 EV native interface
1539 EV/Any 100000 244 2.50 0.46 0.29 EV + AnyEvent watchers 1539 EV/Any 100000 224 2.88 0.44 0.27 EV + AnyEvent watchers
1540 CoroEV/Any 100000 244 2.49 0.44 0.29 coroutines + Coro::Signal 1540 CoroEV/Any 100000 224 2.85 0.45 0.28 coroutines + Coro::Signal
1541 Perl/Any 100000 513 4.92 0.87 1.12 pure perl implementation 1541 Perl/Any 100000 452 4.14 0.75 0.99 pure perl implementation
1542 Event/Event 16000 516 31.88 31.30 0.85 Event native interface 1542 Event/Event 16000 517 32.20 31.80 0.81 Event native interface
1543 Event/Any 16000 590 35.75 31.42 1.08 Event + AnyEvent watchers 1543 Event/Any 16000 590 35.85 31.55 1.06 Event + AnyEvent watchers
1544 Glib/Any 16000 1357 98.22 12.41 54.00 quadratic behaviour 1544 Glib/Any 16000 1357 102.33 12.31 51.00 quadratic behaviour
1545 Tk/Any 2000 1860 26.97 67.98 14.00 SEGV with >> 2000 watchers 1545 Tk/Any 2000 1860 27.20 66.31 14.00 SEGV with >> 2000 watchers
1546 POE/Event 2000 6644 108.64 736.02 14.73 via POE::Loop::Event 1546 POE/Event 2000 6328 109.99 751.67 14.02 via POE::Loop::Event
1547 POE/Select 2000 6343 94.13 809.12 565.96 via POE::Loop::Select 1547 POE/Select 2000 6027 94.54 809.13 579.80 via POE::Loop::Select
1548 1548
1549=head3 Discussion 1549=head3 Discussion
1550 1550
1551The benchmark does I<not> measure scalability of the event loop very 1551The benchmark does I<not> measure scalability of the event loop very
1552well. For example, a select-based event loop (such as the pure perl one) 1552well. For example, a select-based event loop (such as the pure perl one)
1754watchers, as the management overhead dominates. 1754watchers, as the management overhead dominates.
1755 1755
1756=back 1756=back
1757 1757
1758 1758
1759=head1 SIGNALS
1760
1761AnyEvent currently installs handlers for these signals:
1762
1763=over 4
1764
1765=item SIGCHLD
1766
1767A handler for C<SIGCHLD> is installed by AnyEvent's child watcher
1768emulation for event loops that do not support them natively. Also, some
1769event loops install a similar handler.
1770
1771=item SIGPIPE
1772
1773A no-op handler is installed for C<SIGPIPE> when C<$SIG{PIPE}> is C<undef>
1774when AnyEvent gets loaded.
1775
1776The rationale for this is that AnyEvent users usually do not really depend
1777on SIGPIPE delivery (which is purely an optimisation for shell use, or
1778badly-written programs), but C<SIGPIPE> can cause spurious and rare
1779program exits as a lot of people do not expect C<SIGPIPE> when writing to
1780some random socket.
1781
1782The rationale for installing a no-op handler as opposed to ignoring it is
1783that this way, the handler will be restored to defaults on exec.
1784
1785Feel free to install your own handler, or reset it to defaults.
1786
1787=back
1788
1789=cut
1790
1791$SIG{PIPE} = sub { }
1792 unless defined $SIG{PIPE};
1793
1794
1759=head1 FORK 1795=head1 FORK
1760 1796
1761Most event libraries are not fork-safe. The ones who are usually are 1797Most event libraries are not fork-safe. The ones who are usually are
1762because they rely on inefficient but fork-safe C<select> or C<poll> 1798because they rely on inefficient but fork-safe C<select> or C<poll>
1763calls. Only L<EV> is fully fork-aware. 1799calls. Only L<EV> is fully fork-aware.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines