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

Comparing Coro/Coro.pm (file contents):
Revision 1.248 by root, Mon Dec 15 15:03:31 2008 UTC vs.
Revision 1.251 by root, Mon Mar 16 22:22:12 2009 UTC

40points in your program, so locking and parallel access are rarely an 40points in your program, so locking and parallel access are rarely an
41issue, making thread programming much safer and easier than using other 41issue, making thread programming much safer and easier than using other
42thread models. 42thread models.
43 43
44Unlike the so-called "Perl threads" (which are not actually real threads 44Unlike the so-called "Perl threads" (which are not actually real threads
45but only the windows process emulation ported to unix), Coro provides a 45but only the windows process emulation ported to unix, and as such act
46full shared address space, which makes communication between threads 46as processes), Coro provides a full shared address space, which makes
47very easy. And threads are fast, too: disabling the Windows process 47communication between threads very easy. And Coro's threads are fast,
48emulation code in your perl and using Coro can easily result in a two to 48too: disabling the Windows process emulation code in your perl and using
49four times speed increase for your programs. 49Coro can easily result in a two to four times speed increase for your
50programs. A parallel matrix multiplication benchmark runs over 300 times
51faster on a single core than perl's pseudo-threads on a quad core using
52all four cores.
50 53
51Coro achieves that by supporting multiple running interpreters that share 54Coro achieves that by supporting multiple running interpreters that share
52data, which is especially useful to code pseudo-parallel processes and 55data, which is especially useful to code pseudo-parallel processes and
53for event-based programming, such as multiple HTTP-GET requests running 56for event-based programming, such as multiple HTTP-GET requests running
54concurrently. See L<Coro::AnyEvent> to learn more on how to integrate Coro 57concurrently. See L<Coro::AnyEvent> to learn more on how to integrate Coro
55into an event-based environment. 58into an event-based environment.
56 59
57In this module, a thread is defined as "callchain + lexical variables + 60In this module, a thread is defined as "callchain + lexical variables +
58@_ + $_ + $@ + $/ + C stack), that is, a thread has its own callchain, 61some package variables + C stack), that is, a thread has its own callchain,
59its own set of lexicals and its own set of perls most important global 62its own set of lexicals and its own set of perls most important global
60variables (see L<Coro::State> for more configuration and background info). 63variables (see L<Coro::State> for more configuration and background info).
61 64
62See also the C<SEE ALSO> section at the end of this document - the Coro 65See also the C<SEE ALSO> section at the end of this document - the Coro
63module family is quite large. 66module family is quite large.
77 80
78our $idle; # idle handler 81our $idle; # idle handler
79our $main; # main coro 82our $main; # main coro
80our $current; # current coro 83our $current; # current coro
81 84
82our $VERSION = 5.13; 85our $VERSION = 5.131;
83 86
84our @EXPORT = qw(async async_pool cede schedule terminate current unblock_sub); 87our @EXPORT = qw(async async_pool cede schedule terminate current unblock_sub);
85our %EXPORT_TAGS = ( 88our %EXPORT_TAGS = (
86 prio => [qw(PRIO_MAX PRIO_HIGH PRIO_NORMAL PRIO_LOW PRIO_IDLE PRIO_MIN)], 89 prio => [qw(PRIO_MAX PRIO_HIGH PRIO_NORMAL PRIO_LOW PRIO_IDLE PRIO_MIN)],
87); 90);
423the ready queue, do nothing and return false. 426the ready queue, do nothing and return false.
424 427
425This ensures that the scheduler will resume this coro automatically 428This ensures that the scheduler will resume this coro automatically
426once all the coro of higher priority and all coro of the same 429once all the coro of higher priority and all coro of the same
427priority that were put into the ready queue earlier have been resumed. 430priority that were put into the ready queue earlier have been resumed.
431
432=item $coro->suspend
433
434Suspends the specified coro. A suspended coro works just like any other
435coro, except that the scheduler will not select a suspended coro for
436execution.
437
438Suspending a coro can be useful when you want to keep the coro from
439running, but you don't want to destroy it, or when you want to temporarily
440freeze a coro (e.g. for debugging) to resume it later.
441
442A scenario for the former would be to suspend all (other) coros after a
443fork and keep them alive, so their destructors aren't called, but new
444coros can be created.
445
446=item $coro->resume
447
448If the specified coro was suspended, it will be resumed. Note that when
449the coro was in the ready queue when it was suspended, it might have been
450unreadied by the scheduler, so an activation might have been lost.
451
452To avoid this, it is best to put a suspended coro into the ready queue
453unconditionally, as every synchronisation mechanism must protect itself
454against spurious wakeups, and the one in the Coro family certainly do
455that.
428 456
429=item $is_ready = $coro->is_ready 457=item $is_ready = $coro->is_ready
430 458
431Returns true iff the Coro object is in the ready queue. Unless the Coro 459Returns true iff the Coro object is in the ready queue. Unless the Coro
432object gets destroyed, it will eventually be scheduled by the scheduler. 460object gets destroyed, it will eventually be scheduled by the scheduler.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines