ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/Coro/Coro.pm
(Generate patch)

Comparing cvsroot/Coro/Coro.pm (file contents):
Revision 1.217 by root, Fri Nov 14 23:48:10 2008 UTC vs.
Revision 1.224 by root, Wed Nov 19 05:52:42 2008 UTC

86coroutines, it is mainly useful to compare again C<$Coro::current>, to see 86coroutines, it is mainly useful to compare again C<$Coro::current>, to see
87whether you are running in the main program or not. 87whether you are running in the main program or not.
88 88
89=cut 89=cut
90 90
91$main = new Coro; 91# $main is now being initialised by Coro::State
92 92
93=item $Coro::current 93=item $Coro::current
94 94
95The coroutine object representing the current coroutine (the last 95The coroutine object representing the current coroutine (the last
96coroutine that the Coro scheduler switched to). The initial value is 96coroutine that the Coro scheduler switched to). The initial value is
97C<$main> (of course). 97C<$Coro::main> (of course).
98 98
99This variable is B<strictly> I<read-only>. You can take copies of the 99This variable is B<strictly> I<read-only>. You can take copies of the
100value stored in it and use it as any other coroutine object, but you must 100value stored in it and use it as any other coroutine object, but you must
101not otherwise modify the variable itself. 101not otherwise modify the variable itself.
102 102
103=cut 103=cut
104
105$main->{desc} = "[main::]";
106
107# maybe some other module used Coro::Specific before...
108$main->{_specific} = $current->{_specific}
109 if $current;
110
111_set_current $main;
112 104
113sub current() { $current } # [DEPRECATED] 105sub current() { $current } # [DEPRECATED]
114 106
115=item $Coro::idle 107=item $Coro::idle
116 108
275 } 267 }
276 } 268 }
277} 269}
278 270
279sub async_pool(&@) { 271sub async_pool(&@) {
280 # this is also inlined into the unlock_scheduler 272 # this is also inlined into the unblock_scheduler
281 my $coro = (pop @async_pool) || new Coro \&pool_handler; 273 my $coro = (pop @async_pool) || new Coro \&pool_handler;
282 274
283 $coro->{_invoke} = [@_]; 275 $coro->{_invoke} = [@_];
284 $coro->ready; 276 $coro->ready;
285 277
313>> on that once some event happens, and last you call C<schedule> to put 305>> on that once some event happens, and last you call C<schedule> to put
314yourself to sleep. Note that a lot of things can wake your coroutine up, 306yourself to sleep. Note that a lot of things can wake your coroutine up,
315so you need to check whether the event indeed happened, e.g. by storing the 307so you need to check whether the event indeed happened, e.g. by storing the
316status in a variable. 308status in a variable.
317 309
318The canonical way to wait on external events is this: 310See B<HOW TO WAIT FOR A CALLBACK>, below, for some ways to wait for callbacks.
319
320 {
321 # remember current coroutine
322 my $current = $Coro::current;
323
324 # register a hypothetical event handler
325 on_event_invoke sub {
326 # wake up sleeping coroutine
327 $current->ready;
328 undef $current;
329 };
330
331 # call schedule until event occurred.
332 # in case we are woken up for other reasons
333 # (current still defined), loop.
334 Coro::schedule while $current;
335 }
336 311
337=item cede 312=item cede
338 313
339"Cede" to other coroutines. This function puts the current coroutine into 314"Cede" to other coroutines. This function puts the current coroutine into
340the ready queue and calls C<schedule>, which has the effect of giving 315the ready queue and calls C<schedule>, which has the effect of giving
444} 419}
445 420
446=item $coroutine->throw ([$scalar]) 421=item $coroutine->throw ([$scalar])
447 422
448If C<$throw> is specified and defined, it will be thrown as an exception 423If C<$throw> is specified and defined, it will be thrown as an exception
449inside the coroutine at the next convenient point in time (usually after 424inside the coroutine at the next convenient point in time. Otherwise
450it gains control at the next schedule/transfer/cede). Otherwise clears the
451exception object. 425clears the exception object.
426
427Coro will check for the exception each time a schedule-like-function
428returns, i.e. after each C<schedule>, C<cede>, C<< Coro::Semaphore->down
429>>, C<< Coro::Handle->readable >> and so on. Most of these functions
430detect this case and return early in case an exception is pending.
452 431
453The exception object will be thrown "as is" with the specified scalar in 432The exception object will be thrown "as is" with the specified scalar in
454C<$@>, i.e. if it is a string, no line number or newline will be appended 433C<$@>, i.e. if it is a string, no line number or newline will be appended
455(unlike with C<die>). 434(unlike with C<die>).
456 435
657 unshift @unblock_queue, [$cb, @_]; 636 unshift @unblock_queue, [$cb, @_];
658 $unblock_scheduler->ready; 637 $unblock_scheduler->ready;
659 } 638 }
660} 639}
661 640
641=item $cb = Coro::rouse_cb
642
643Create and return a "rouse callback". That's a code reference that, when
644called, will save its arguments and notify the owner coroutine of the
645callback.
646
647See the next function.
648
649=item @args = Coro::rouse_wait [$cb]
650
651Wait for the specified rouse callback (or the last one tht was created in
652this coroutine).
653
654As soon as the callback is invoked (or when the calback was invoked before
655C<rouse_wait>), it will return a copy of the arguments originally passed
656to the rouse callback.
657
658See the section B<HOW TO WAIT FOR A CALLBACK> for an actual usage example.
659
662=back 660=back
663 661
664=cut 662=cut
665 663
6661; 6641;
667 665
666=head1 HOW TO WAIT FOR A CALLBACK
667
668It is very common for a coroutine to wait for some callback to be
669called. This occurs naturally when you use coroutines in an otherwise
670event-based program, or when you use event-based libraries.
671
672These typically register a callback for some event, and call that callback
673when the event occured. In a coroutine, however, you typically want to
674just wait for the event, simplyifying things.
675
676For example C<< AnyEvent->child >> registers a callback to be called when
677a specific child has exited:
678
679 my $child_watcher = AnyEvent->child (pid => $pid, cb => sub { ... });
680
681But from withina coroutine, you often just want to write this:
682
683 my $status = wait_for_child $pid;
684
685Coro offers two functions specifically designed to make this easy,
686C<Coro::rouse_cb> and C<Coro::rouse_wait>.
687
688The first function, C<rouse_cb>, generates and returns a callback that,
689when invoked, will save it's arguments and notify the coroutine that
690created the callback.
691
692The second function, C<rouse_wait>, waits for the callback to be called
693(by calling C<schedule> to go to sleep) and returns the arguments
694originally passed to the callback.
695
696Using these functions, it becomes easy to write the C<wait_for_child>
697function mentioned above:
698
699 sub wait_for_child($) {
700 my ($pid) = @_;
701
702 my $watcher = AnyEvent->child (pid => $pid, cb => Coro::rouse_cb);
703
704 my ($rpid, $rstatus) = Coro::rouse_wait;
705 $rstatus
706 }
707
708In the case where C<rouse_cb> and C<rouse_wait> are not flexible enough,
709you can roll your own, using C<schedule>:
710
711 sub wait_for_child($) {
712 my ($pid) = @_;
713
714 # store the current coroutine in $current,
715 # and provide result variables for the closure passed to ->child
716 my $current = $Coro::current;
717 my ($done, $rstatus);
718
719 # pass a closure to ->child
720 my $watcher = AnyEvent->child (pid => $pid, cb => sub {
721 $rstatus = $_[1]; # remember rstatus
722 $done = 1; # mark $rstatus as valud
723 });
724
725 # wait until the closure has been called
726 schedule while !$done;
727
728 $rstatus
729 }
730
731
668=head1 BUGS/LIMITATIONS 732=head1 BUGS/LIMITATIONS
669 733
670=over 4 734=over 4
735
736=item fork with pthread backend
737
738When Coro is compiled using the pthread backend (which isn't recommended
739but required on many BSDs as their libcs are completely broken), then
740coroutines will not survive a fork. There is no known workaround except to
741fix your libc and use a saner backend.
671 742
672=item perl process emulation ("threads") 743=item perl process emulation ("threads")
673 744
674This module is not perl-pseudo-thread-safe. You should only ever use this 745This module is not perl-pseudo-thread-safe. You should only ever use this
675module from the same thread (this requirement might be removed in the 746module from the same thread (this requirement might be removed in the
681=item coroutine switching not signal safe 752=item coroutine switching not signal safe
682 753
683You must not switch to another coroutine from within a signal handler 754You must not switch to another coroutine from within a signal handler
684(only relevant with %SIG - most event libraries provide safe signals). 755(only relevant with %SIG - most event libraries provide safe signals).
685 756
686That means you I<MUST NOT> call any fucntion that might "block" the 757That means you I<MUST NOT> call any function that might "block" the
687current coroutine - C<cede>, C<schedule> C<< Coro::Semaphore->down >> or 758current coroutine - C<cede>, C<schedule> C<< Coro::Semaphore->down >> or
688anything that calls those. Everything else, including calling C<ready>, 759anything that calls those. Everything else, including calling C<ready>,
689works. 760works.
690 761
691=back 762=back

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines