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

Comparing Coro/Coro.pm (file contents):
Revision 1.211 by root, Mon Nov 10 00:02:29 2008 UTC vs.
Revision 1.225 by root, Wed Nov 19 15:29:57 2008 UTC

67 67
68our $idle; # idle handler 68our $idle; # idle handler
69our $main; # main coroutine 69our $main; # main coroutine
70our $current; # current coroutine 70our $current; # current coroutine
71 71
72our $VERSION = 4.9; 72our $VERSION = 5.0;
73 73
74our @EXPORT = qw(async async_pool cede schedule terminate current unblock_sub); 74our @EXPORT = qw(async async_pool cede schedule terminate current unblock_sub);
75our %EXPORT_TAGS = ( 75our %EXPORT_TAGS = (
76 prio => [qw(PRIO_MAX PRIO_HIGH PRIO_NORMAL PRIO_LOW PRIO_IDLE PRIO_MIN)], 76 prio => [qw(PRIO_MAX PRIO_HIGH PRIO_NORMAL PRIO_LOW PRIO_IDLE PRIO_MIN)],
77); 77);
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
396See C<async> and C<Coro::State::new> for additional info about the 371See C<async> and C<Coro::State::new> for additional info about the
397coroutine environment. 372coroutine environment.
398 373
399=cut 374=cut
400 375
401sub _run_coro { 376sub _terminate {
402 terminate &{+shift}; 377 terminate &{+shift};
403}
404
405sub new {
406 my $class = shift;
407
408 $class->SUPER::new (\&_run_coro, @_)
409} 378}
410 379
411=item $success = $coroutine->ready 380=item $success = $coroutine->ready
412 381
413Put the given coroutine into the end of its ready queue (there is one 382Put the given coroutine into the end of its ready queue (there is one
444} 413}
445 414
446=item $coroutine->throw ([$scalar]) 415=item $coroutine->throw ([$scalar])
447 416
448If C<$throw> is specified and defined, it will be thrown as an exception 417If 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 418inside the coroutine at the next convenient point in time. Otherwise
450it gains control at the next schedule/transfer/cede). Otherwise clears the
451exception object. 419clears the exception object.
420
421Coro will check for the exception each time a schedule-like-function
422returns, i.e. after each C<schedule>, C<cede>, C<< Coro::Semaphore->down
423>>, C<< Coro::Handle->readable >> and so on. Most of these functions
424detect this case and return early in case an exception is pending.
452 425
453The exception object will be thrown "as is" with the specified scalar in 426The 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 427C<$@>, i.e. if it is a string, no line number or newline will be appended
455(unlike with C<die>). 428(unlike with C<die>).
456 429
657 unshift @unblock_queue, [$cb, @_]; 630 unshift @unblock_queue, [$cb, @_];
658 $unblock_scheduler->ready; 631 $unblock_scheduler->ready;
659 } 632 }
660} 633}
661 634
635=item $cb = Coro::rouse_cb
636
637Create and return a "rouse callback". That's a code reference that, when
638called, will save its arguments and notify the owner coroutine of the
639callback.
640
641See the next function.
642
643=item @args = Coro::rouse_wait [$cb]
644
645Wait for the specified rouse callback (or the last one tht was created in
646this coroutine).
647
648As soon as the callback is invoked (or when the calback was invoked before
649C<rouse_wait>), it will return a copy of the arguments originally passed
650to the rouse callback.
651
652See the section B<HOW TO WAIT FOR A CALLBACK> for an actual usage example.
653
662=back 654=back
663 655
664=cut 656=cut
665 657
6661; 6581;
667 659
660=head1 HOW TO WAIT FOR A CALLBACK
661
662It is very common for a coroutine to wait for some callback to be
663called. This occurs naturally when you use coroutines in an otherwise
664event-based program, or when you use event-based libraries.
665
666These typically register a callback for some event, and call that callback
667when the event occured. In a coroutine, however, you typically want to
668just wait for the event, simplyifying things.
669
670For example C<< AnyEvent->child >> registers a callback to be called when
671a specific child has exited:
672
673 my $child_watcher = AnyEvent->child (pid => $pid, cb => sub { ... });
674
675But from withina coroutine, you often just want to write this:
676
677 my $status = wait_for_child $pid;
678
679Coro offers two functions specifically designed to make this easy,
680C<Coro::rouse_cb> and C<Coro::rouse_wait>.
681
682The first function, C<rouse_cb>, generates and returns a callback that,
683when invoked, will save it's arguments and notify the coroutine that
684created the callback.
685
686The second function, C<rouse_wait>, waits for the callback to be called
687(by calling C<schedule> to go to sleep) and returns the arguments
688originally passed to the callback.
689
690Using these functions, it becomes easy to write the C<wait_for_child>
691function mentioned above:
692
693 sub wait_for_child($) {
694 my ($pid) = @_;
695
696 my $watcher = AnyEvent->child (pid => $pid, cb => Coro::rouse_cb);
697
698 my ($rpid, $rstatus) = Coro::rouse_wait;
699 $rstatus
700 }
701
702In the case where C<rouse_cb> and C<rouse_wait> are not flexible enough,
703you can roll your own, using C<schedule>:
704
705 sub wait_for_child($) {
706 my ($pid) = @_;
707
708 # store the current coroutine in $current,
709 # and provide result variables for the closure passed to ->child
710 my $current = $Coro::current;
711 my ($done, $rstatus);
712
713 # pass a closure to ->child
714 my $watcher = AnyEvent->child (pid => $pid, cb => sub {
715 $rstatus = $_[1]; # remember rstatus
716 $done = 1; # mark $rstatus as valud
717 });
718
719 # wait until the closure has been called
720 schedule while !$done;
721
722 $rstatus
723 }
724
725
668=head1 BUGS/LIMITATIONS 726=head1 BUGS/LIMITATIONS
727
728=over 4
729
730=item fork with pthread backend
731
732When Coro is compiled using the pthread backend (which isn't recommended
733but required on many BSDs as their libcs are completely broken), then
734coroutines will not survive a fork. There is no known workaround except to
735fix your libc and use a saner backend.
736
737=item perl process emulation ("threads")
669 738
670This module is not perl-pseudo-thread-safe. You should only ever use this 739This module is not perl-pseudo-thread-safe. You should only ever use this
671module from the same thread (this requirement might be removed in the 740module from the same thread (this requirement might be removed in the
672future to allow per-thread schedulers, but Coro::State does not yet allow 741future to allow per-thread schedulers, but Coro::State does not yet allow
673this). I recommend disabling thread support and using processes, as this 742this). I recommend disabling thread support and using processes, as having
674is much faster and uses less memory. 743the windows process emulation enabled under unix roughly halves perl
744performance, even when not used.
745
746=item coroutine switching not signal safe
747
748You must not switch to another coroutine from within a signal handler
749(only relevant with %SIG - most event libraries provide safe signals).
750
751That means you I<MUST NOT> call any function that might "block" the
752current coroutine - C<cede>, C<schedule> C<< Coro::Semaphore->down >> or
753anything that calls those. Everything else, including calling C<ready>,
754works.
755
756=back
757
675 758
676=head1 SEE ALSO 759=head1 SEE ALSO
677 760
678Event-Loop integration: L<Coro::AnyEvent>, L<Coro::EV>, L<Coro::Event>. 761Event-Loop integration: L<Coro::AnyEvent>, L<Coro::EV>, L<Coro::Event>.
679 762

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines