--- AnyEvent/lib/AnyEvent.pm 2008/04/07 19:42:18 1.44 +++ AnyEvent/lib/AnyEvent.pm 2008/04/19 03:47:24 1.52 @@ -2,7 +2,7 @@ AnyEvent - provide framework for multiple event loops -Event, Coro, Glib, Tk, Perl - various supported event loops +EV, Event, Coro::EV, Coro::Event, Glib, Tk, Perl - various supported event loops =head1 SYNOPSIS @@ -16,7 +16,7 @@ ... }); - my $w = AnyEvent->condvar; # stores wether a condition was flagged + my $w = AnyEvent->condvar; # stores whether a condition was flagged $w->wait; # enters "main loop" till $condvar gets ->broadcast $w->broadcast; # wake up current and all future wait's @@ -60,9 +60,9 @@ offering the functionality that is useful, in as thin as a wrapper as technically possible. -Of course, if you want lots of policy (this is arguably somewhat useful -in many cases) and you want to force your users to the one and only event -model your module forces on them, you should I use this module. +Of course, if you want lots of policy (this can arguably be somewhat +useful) and you want to force your users to use the one and only event +model, you should I use this module. =head1 DESCRIPTION @@ -76,12 +76,12 @@ module. On the first call of any method, the module tries to detect the currently -loaded event loop by probing wether any of the following modules is -loaded: L, L, L, L. The first one found is -used. If none is found, the module tries to load these modules in the -order given. The first one that could be successfully loaded will be -used. If still none could be found, AnyEvent will fall back to a pure-perl -event loop, which is also not very efficient. +loaded event loop by probing whether any of the following modules is +loaded: L, L, L, L, L, L. The +first one found is used. If none are found, the module tries to load these +modules in the order given. The first one that could be successfully +loaded will be used. If still none could be found, AnyEvent will fall back +to a pure-perl event loop, which is also not very efficient. Because AnyEvent first checks for modules that are already loaded, loading an Event model explicitly before first using AnyEvent will likely make @@ -120,10 +120,6 @@ a watcher waiting for "r"eadable or "w"ritable events. C the callback to invoke everytime the filehandle becomes ready. -Only one io watcher per C and C combination is allowed (i.e. on -a socket you can have one r + one w, not any more (limitation comes from -Tk - if you are sure you are not using Tk this limitation is gone). - Filehandles will be kept alive, so as long as the watcher exists, the filehandle exists, too. @@ -181,16 +177,24 @@ Wait (blocking if necessary) until the C<< ->broadcast >> method has been called on c<$cv>, while servicing other watchers normally. -Not all event models support a blocking wait - some die in that case, so -if you are using this from a module, never require a blocking wait, but -let the caller decide wether the call will block or not (for example, -by coupling condition variables with some kind of request results and -supporting callbacks so the caller knows that getting the result will not -block, while still suppporting blockign waits if the caller so desires). - You can only wait once on a condition - additional calls will return immediately. +Not all event models support a blocking wait - some die in that case +(programs might want to do that so they stay interactive), so I, but let the +caller decide whether the call will block or not (for example, by coupling +condition variables with some kind of request results and supporting +callbacks so the caller knows that getting the result will not block, +while still suppporting blocking waits if the caller so desires). + +Another reason I to C<< ->wait >> in a module is that you cannot +sensibly have two C<< ->wait >>'s in parallel, as that would require +multiple interpreters or coroutines/threads, none of which C +can supply (the coroutine-aware backends C and C +explicitly support concurrent C<< ->wait >>'s from different coroutines, +however). + =item $cv->broadcast Flag the condition as ready - a running C<< ->wait >> and all further @@ -251,12 +255,12 @@ The known classes so far are: AnyEvent::Impl::CoroEV based on Coro::EV, best choice. - AnyEvent::Impl::EV based on EV (an interface to libev, also best choice). AnyEvent::Impl::CoroEvent based on Coro::Event, second best choice. + AnyEvent::Impl::EV based on EV (an interface to libev, also best choice). AnyEvent::Impl::Event based on Event, also second best choice :) - AnyEvent::Impl::Glib based on Glib, second-best choice. + AnyEvent::Impl::Glib based on Glib, third-best choice. AnyEvent::Impl::Tk based on Tk, very bad choice. - AnyEvent::Impl::Perl pure-perl implementation, inefficient. + AnyEvent::Impl::Perl pure-perl implementation, inefficient but portable. =item AnyEvent::detect @@ -305,7 +309,7 @@ use Carp; -our $VERSION = '3.0'; +our $VERSION = '3.1'; our $MODEL; our $AUTOLOAD; @@ -317,8 +321,8 @@ my @models = ( [Coro::EV:: => AnyEvent::Impl::CoroEV::], - [EV:: => AnyEvent::Impl::EV::], [Coro::Event:: => AnyEvent::Impl::CoroEvent::], + [EV:: => AnyEvent::Impl::EV::], [Event:: => AnyEvent::Impl::Event::], [Glib:: => AnyEvent::Impl::Glib::], [Tk:: => AnyEvent::Impl::Tk::], @@ -625,7 +629,7 @@ The actual code goes further and collects all errors (Cs, exceptions) that occured during request processing. The C method detects -wether an exception as thrown (it is stored inside the $txn object) +whether an exception as thrown (it is stored inside the $txn object) and just throws the exception, which means connection errors and other problems get reported tot he code that tries to use the result, not in a random callback. @@ -636,7 +640,7 @@ my $data = $fcp->client_get ($url); -2. Blocking, but parallelizing: +2. Blocking, but running in parallel: my @datas = map $_->result, map $fcp->txn_client_get ($_), @@ -645,9 +649,9 @@ Both blocking examples work without the module user having to know anything about events. -3a. Event-based in a main program, using any support Event module: +3a. Event-based in a main program, using any supported event module: - use Event; + use EV; $fcp->txn_client_get ($url)->cb (sub { my $txn = shift; @@ -655,7 +659,7 @@ ... }); - Event::loop; + EV::loop; 3b. The module user could use AnyEvent, too: @@ -672,11 +676,14 @@ =head1 SEE ALSO -Event modules: L, L, L, L, L. +Event modules: L, L, L, L, +L, L, L, L, L, L. -Implementations: L, L, L, L. +Implementations: L, L, +L, L, +L, L, L. -Nontrivial usage example: L. +Nontrivial usage examples: L, L. =head1