ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/README
Revision: 1.23
Committed: Fri May 29 07:01:18 2009 UTC (14 years, 11 months ago) by root
Branch: MAIN
CVS Tags: rel-5_132
Changes since 1.22: +1 -1 lines
Log Message:
5.132

File Contents

# User Rev Content
1 root 1.1 NAME
2 root 1.19 Coro - the only real threads in perl
3 root 1.1
4     SYNOPSIS
5 root 1.14 use Coro;
6    
7     async {
8     # some asynchronous thread of execution
9     print "2\n";
10     cede; # yield back to main
11     print "4\n";
12     };
13     print "1\n";
14 root 1.21 cede; # yield to coro
15 root 1.14 print "3\n";
16     cede; # and again
17    
18     # use locking
19 root 1.15 use Coro::Semaphore;
20 root 1.14 my $lock = new Coro::Semaphore;
21     my $locked;
22    
23     $lock->down;
24     $locked = 1;
25     $lock->up;
26 root 1.1
27     DESCRIPTION
28 root 1.19 For a tutorial-style introduction, please read the Coro::Intro manpage.
29     This manpage mainly contains reference information.
30 root 1.1
31 root 1.19 This module collection manages continuations in general, most often in
32 root 1.21 the form of cooperative threads (also called coros, or simply "coro" in
33     the documentation). They are similar to kernel threads but don't (in
34 root 1.19 general) run in parallel at the same time even on SMP machines. The
35     specific flavor of thread offered by this module also guarantees you
36     that it will not switch between threads unless necessary, at
37     easily-identified points in your program, so locking and parallel access
38     are rarely an issue, making thread programming much safer and easier
39     than using other thread models.
40    
41     Unlike the so-called "Perl threads" (which are not actually real threads
42 root 1.21 but only the windows process emulation ported to unix, and as such act
43     as processes), Coro provides a full shared address space, which makes
44     communication between threads very easy. And Coro's threads are fast,
45     too: disabling the Windows process emulation code in your perl and using
46     Coro can easily result in a two to four times speed increase for your
47     programs. A parallel matrix multiplication benchmark runs over 300 times
48     faster on a single core than perl's pseudo-threads on a quad core using
49     all four cores.
50 root 1.19
51     Coro achieves that by supporting multiple running interpreters that
52     share data, which is especially useful to code pseudo-parallel processes
53     and for event-based programming, such as multiple HTTP-GET requests
54     running concurrently. See Coro::AnyEvent to learn more on how to
55     integrate Coro into an event-based environment.
56    
57     In this module, a thread is defined as "callchain + lexical variables +
58 root 1.21 some package variables + C stack), that is, a thread has its own
59     callchain, its own set of lexicals and its own set of perls most
60     important global variables (see Coro::State for more configuration and
61     background info).
62 root 1.19
63     See also the "SEE ALSO" section at the end of this document - the Coro
64     module family is quite large.
65    
66     GLOBAL VARIABLES
67 root 1.14 $Coro::main
68 root 1.21 This variable stores the Coro object that represents the main
69 root 1.14 program. While you cna "ready" it and do most other things you can
70 root 1.21 do to coro, it is mainly useful to compare again $Coro::current, to
71     see whether you are running in the main program or not.
72 root 1.14
73     $Coro::current
74 root 1.21 The Coro object representing the current coro (the last coro that
75     the Coro scheduler switched to). The initial value is $Coro::main
76     (of course).
77 root 1.14
78     This variable is strictly *read-only*. You can take copies of the
79 root 1.21 value stored in it and use it as any other Coro object, but you must
80     not otherwise modify the variable itself.
81 root 1.14
82     $Coro::idle
83     This variable is mainly useful to integrate Coro into event loops.
84 root 1.19 It is usually better to rely on Coro::AnyEvent or Coro::EV, as this
85     is pretty low-level functionality.
86    
87 root 1.21 This variable stores either a Coro object or a callback.
88 root 1.19
89     If it is a callback, the it is called whenever the scheduler finds
90 root 1.21 no ready coros to run. The default implementation prints "FATAL:
91     deadlock detected" and exits, because the program has no other way
92     to continue.
93    
94     If it is a coro object, then this object will be readied (without
95     invoking any ready hooks, however) when the scheduler finds no other
96     ready coros to run.
97 root 1.14
98 root 1.19 This hook is overwritten by modules such as "Coro::EV" and
99 root 1.14 "Coro::AnyEvent" to wait on an external event that hopefully wake up
100 root 1.21 a coro so the scheduler can run it.
101 root 1.1
102 root 1.14 Note that the callback *must not*, under any circumstances, block
103 root 1.21 the current coro. Normally, this is achieved by having an "idle
104     coro" that calls the event loop and then blocks again, and then
105     readying that coro in the idle handler, or by simply placing the
106     idle coro in this variable.
107 root 1.4
108 root 1.14 See Coro::Event or Coro::AnyEvent for examples of using this
109     technique.
110 root 1.4
111     Please note that if your callback recursively invokes perl (e.g. for
112 root 1.12 event handlers), then it must be prepared to be called recursively
113     itself.
114 root 1.1
115 root 1.21 SIMPLE CORO CREATION
116 root 1.14 async { ... } [@args...]
117 root 1.21 Create a new coro and return its Coro object (usually unused). The
118     coro will be put into the ready queue, so it will start running
119     automatically on the next scheduler run.
120 root 1.1
121 root 1.14 The first argument is a codeblock/closure that should be executed in
122 root 1.21 the coro. When it returns argument returns the coro is automatically
123     terminated.
124 root 1.1
125 root 1.14 The remaining arguments are passed as arguments to the closure.
126    
127 root 1.21 See the "Coro::State::new" constructor for info about the coro
128     environment in which coro are executed.
129 root 1.10
130 root 1.21 Calling "exit" in a coro will do the same as calling exit outside
131     the coro. Likewise, when the coro dies, the program will exit, just
132     as it would in the main program.
133 root 1.3
134 root 1.14 If you do not want that, you can provide a default "die" handler, or
135     simply avoid dieing (by use of "eval").
136    
137 root 1.21 Example: Create a new coro that just prints its arguments.
138 root 1.14
139 root 1.1 async {
140     print "@_\n";
141     } 1,2,3,4;
142    
143 root 1.6 async_pool { ... } [@args...]
144 root 1.21 Similar to "async", but uses a coro pool, so you should not call
145     terminate or join on it (although you are allowed to), and you get a
146     coro that might have executed other code already (which can be good
147     or bad :).
148 root 1.14
149 root 1.18 On the plus side, this function is about twice as fast as creating
150 root 1.21 (and destroying) a completely new coro, so if you need a lot of
151     generic coros in quick successsion, use "async_pool", not "async".
152 root 1.6
153 root 1.14 The code block is executed in an "eval" context and a warning will
154 root 1.6 be issued in case of an exception instead of terminating the
155 root 1.21 program, as "async" does. As the coro is being reused, stuff like
156     "on_destroy" will not work in the expected way, unless you call
157 root 1.14 terminate or cancel, which somehow defeats the purpose of pooling
158     (but is fine in the exceptional case).
159 root 1.6
160 root 1.14 The priority will be reset to 0 after each run, tracing will be
161 root 1.10 disabled, the description will be reset and the default output
162 root 1.14 filehandle gets restored, so you can change all these. Otherwise the
163 root 1.21 coro will be re-used "as-is": most notably if you change other
164     per-coro global stuff such as $/ you *must needs* revert that
165 root 1.16 change, which is most simply done by using local as in: "local $/".
166    
167 root 1.21 The idle pool size is limited to 8 idle coros (this can be adjusted
168     by changing $Coro::POOL_SIZE), but there can be as many non-idle
169     coros as required.
170 root 1.6
171 root 1.21 If you are concerned about pooled coros growing a lot because a
172 root 1.6 single "async_pool" used a lot of stackspace you can e.g.
173     "async_pool { terminate }" once per second or so to slowly replenish
174 root 1.9 the pool. In addition to that, when the stacks used by a handler
175 root 1.19 grows larger than 32kb (adjustable via $Coro::POOL_RSS) it will also
176 root 1.14 be destroyed.
177    
178 root 1.19 STATIC METHODS
179     Static methods are actually functions that implicitly operate on the
180 root 1.21 current coro.
181 root 1.6
182 root 1.1 schedule
183 root 1.21 Calls the scheduler. The scheduler will find the next coro that is
184     to be run from the ready queue and switches to it. The next coro to
185     be run is simply the one with the highest priority that is longest
186     in its ready queue. If there is no coro ready, it will clal the
187     $Coro::idle hook.
188    
189     Please note that the current coro will *not* be put into the ready
190     queue, so calling this function usually means you will never be
191     called again unless something else (e.g. an event handler) calls
192 root 1.14 "->ready", thus waking you up.
193    
194     This makes "schedule" *the* generic method to use to block the
195 root 1.21 current coro and wait for events: first you remember the current
196     coro in a variable, then arrange for some callback of yours to call
197     "->ready" on that once some event happens, and last you call
198     "schedule" to put yourself to sleep. Note that a lot of things can
199     wake your coro up, so you need to check whether the event indeed
200     happened, e.g. by storing the status in a variable.
201 root 1.4
202 root 1.18 See HOW TO WAIT FOR A CALLBACK, below, for some ways to wait for
203     callbacks.
204 root 1.1
205     cede
206 root 1.21 "Cede" to other coros. This function puts the current coro into the
207     ready queue and calls "schedule", which has the effect of giving up
208     the current "timeslice" to other coros of the same or higher
209     priority. Once your coro gets its turn again it will automatically
210     be resumed.
211 root 1.14
212     This function is often called "yield" in other languages.
213 root 1.1
214 root 1.6 Coro::cede_notself
215 root 1.14 Works like cede, but is not exported by default and will cede to
216 root 1.21 *any* coro, regardless of priority. This is useful sometimes to
217 root 1.14 ensure progress is made.
218 root 1.6
219 root 1.1 terminate [arg...]
220 root 1.21 Terminates the current coro with the given status values (see
221 root 1.1 cancel).
222    
223 root 1.21 Coro::on_enter BLOCK, Coro::on_leave BLOCK
224     These function install enter and leave winders in the current scope.
225     The enter block will be executed when on_enter is called and
226     whenever the current coro is re-entered by the scheduler, while the
227     leave block is executed whenever the current coro is blocked by the
228     scheduler, and also when the containing scope is exited (by whatever
229     means, be it exit, die, last etc.).
230    
231     *Neither invoking the scheduler, nor exceptions, are allowed within
232     those BLOCKs*. That means: do not even think about calling "die"
233     without an eval, and do not even think of entering the scheduler in
234     any way.
235    
236     Since both BLOCKs are tied to the current scope, they will
237     automatically be removed when the current scope exits.
238    
239     These functions implement the same concept as "dynamic-wind" in
240     scheme does, and are useful when you want to localise some resource
241     to a specific coro.
242    
243     They slow down coro switching considerably for coros that use them
244     (But coro switching is still reasonably fast if the handlers are
245     fast).
246    
247     These functions are best understood by an example: The following
248     function will change the current timezone to
249     "Antarctica/South_Pole", which requires a call to "tzset", but by
250     using "on_enter" and "on_leave", which remember/change the current
251     timezone and restore the previous value, respectively, the timezone
252 root 1.23 is only changed for the coro that installed those handlers.
253 root 1.21
254     use POSIX qw(tzset);
255    
256     async {
257     my $old_tz; # store outside TZ value here
258    
259     Coro::on_enter {
260     $old_tz = $ENV{TZ}; # remember the old value
261    
262     $ENV{TZ} = "Antarctica/South_Pole";
263     tzset; # enable new value
264     };
265    
266     Coro::on_leave {
267     $ENV{TZ} = $old_tz;
268     tzset; # restore old value
269     };
270    
271     # at this place, the timezone is Antarctica/South_Pole,
272     # without disturbing the TZ of any other coro.
273     };
274    
275     This can be used to localise about any resource (locale, uid,
276     current working directory etc.) to a block, despite the existance of
277     other coros.
278    
279 root 1.10 killall
280 root 1.21 Kills/terminates/cancels all coros except the currently running one.
281    
282     Note that while this will try to free some of the main interpreter
283     resources if the calling coro isn't the main coro, but one cannot
284     free all of them, so if a coro that is not the main coro calls this
285     function, there will be some one-time resource leak.
286    
287     CORO OBJECT METHODS
288     These are the methods you can call on coro objects (or to create them).
289 root 1.1
290     new Coro \&sub [, @args...]
291 root 1.21 Create a new coro and return it. When the sub returns, the coro
292     automatically terminates as if "terminate" with the returned values
293     were called. To make the coro run you must first put it into the
294     ready queue by calling the ready method.
295 root 1.4
296 root 1.10 See "async" and "Coro::State::new" for additional info about the
297 root 1.21 coro environment.
298 root 1.4
299 root 1.21 $success = $coro->ready
300     Put the given coro into the end of its ready queue (there is one
301     queue for each priority) and return true. If the coro is already in
302     the ready queue, do nothing and return false.
303    
304     This ensures that the scheduler will resume this coro automatically
305     once all the coro of higher priority and all coro of the same
306     priority that were put into the ready queue earlier have been
307     resumed.
308    
309 root 1.22 $coro->suspend
310     Suspends the specified coro. A suspended coro works just like any
311     other coro, except that the scheduler will not select a suspended
312     coro for execution.
313    
314     Suspending a coro can be useful when you want to keep the coro from
315     running, but you don't want to destroy it, or when you want to
316     temporarily freeze a coro (e.g. for debugging) to resume it later.
317    
318     A scenario for the former would be to suspend all (other) coros
319     after a fork and keep them alive, so their destructors aren't
320     called, but new coros can be created.
321    
322     $coro->resume
323     If the specified coro was suspended, it will be resumed. Note that
324     when the coro was in the ready queue when it was suspended, it might
325     have been unreadied by the scheduler, so an activation might have
326     been lost.
327    
328     To avoid this, it is best to put a suspended coro into the ready
329     queue unconditionally, as every synchronisation mechanism must
330     protect itself against spurious wakeups, and the one in the Coro
331     family certainly do that.
332    
333 root 1.21 $is_ready = $coro->is_ready
334     Returns true iff the Coro object is in the ready queue. Unless the
335     Coro object gets destroyed, it will eventually be scheduled by the
336     scheduler.
337    
338     $is_running = $coro->is_running
339     Returns true iff the Coro object is currently running. Only one Coro
340     object can ever be in the running state (but it currently is
341     possible to have multiple running Coro::States).
342    
343     $is_suspended = $coro->is_suspended
344     Returns true iff this Coro object has been suspended. Suspended
345     Coros will not ever be scheduled.
346    
347     $coro->cancel (arg...)
348     Terminates the given Coro and makes it return the given arguments as
349     status (default: the empty list). Never returns if the Coro is the
350     current Coro.
351    
352     $coro->schedule_to
353     Puts the current coro to sleep (like "Coro::schedule"), but instead
354     of continuing with the next coro from the ready queue, always switch
355     to the given coro object (regardless of priority etc.). The
356     readyness state of that coro isn't changed.
357 root 1.18
358     This is an advanced method for special cases - I'd love to hear
359     about any uses for this one.
360    
361 root 1.21 $coro->cede_to
362     Like "schedule_to", but puts the current coro into the ready queue.
363     This has the effect of temporarily switching to the given coro, and
364     continuing some time later.
365 root 1.18
366     This is an advanced method for special cases - I'd love to hear
367     about any uses for this one.
368    
369 root 1.21 $coro->throw ([$scalar])
370 root 1.17 If $throw is specified and defined, it will be thrown as an
371 root 1.21 exception inside the coro at the next convenient point in time.
372 root 1.17 Otherwise clears the exception object.
373    
374 root 1.18 Coro will check for the exception each time a schedule-like-function
375     returns, i.e. after each "schedule", "cede",
376     "Coro::Semaphore->down", "Coro::Handle->readable" and so on. Most of
377     these functions detect this case and return early in case an
378     exception is pending.
379    
380 root 1.17 The exception object will be thrown "as is" with the specified
381     scalar in $@, i.e. if it is a string, no line number or newline will
382     be appended (unlike with "die").
383    
384 root 1.21 This can be used as a softer means than "cancel" to ask a coro to
385     end itself, although there is no guarantee that the exception will
386     lead to termination, and if the exception isn't caught it might well
387     end the whole program.
388 root 1.17
389     You might also think of "throw" as being the moral equivalent of
390 root 1.21 "kill"ing a coro with a signal (in this case, a scalar).
391 root 1.17
392 root 1.21 $coro->join
393     Wait until the coro terminates and return any values given to the
394     "terminate" or "cancel" functions. "join" can be called concurrently
395     from multiple coro, and all will be resumed and given the status
396     return once the $coro terminates.
397    
398     $coro->on_destroy (\&cb)
399     Registers a callback that is called when this coro gets destroyed,
400     but before it is joined. The callback gets passed the terminate
401     arguments, if any, and *must not* die, under any circumstances.
402    
403     $oldprio = $coro->prio ($newprio)
404     Sets (or gets, if the argument is missing) the priority of the coro.
405     Higher priority coro get run before lower priority coro. Priorities
406     are small signed integers (currently -4 .. +3), that you can refer
407     to using PRIO_xxx constants (use the import tag :prio to get then):
408 root 1.1
409     PRIO_MAX > PRIO_HIGH > PRIO_NORMAL > PRIO_LOW > PRIO_IDLE > PRIO_MIN
410     3 > 1 > 0 > -1 > -3 > -4
411    
412     # set priority to HIGH
413 root 1.21 current->prio (PRIO_HIGH);
414 root 1.1
415 root 1.21 The idle coro ($Coro::idle) always has a lower priority than any
416     existing coro.
417 root 1.1
418 root 1.21 Changing the priority of the current coro will take effect
419     immediately, but changing the priority of coro in the ready queue
420     (but not running) will only take effect after the next schedule (of
421     that coro). This is a bug that will be fixed in some future version.
422 root 1.1
423 root 1.21 $newprio = $coro->nice ($change)
424 root 1.1 Similar to "prio", but subtract the given value from the priority
425     (i.e. higher values mean lower priority, just as in unix).
426    
427 root 1.21 $olddesc = $coro->desc ($newdesc)
428 root 1.1 Sets (or gets in case the argument is missing) the description for
429 root 1.21 this coro. This is just a free-form string you can associate with a
430     coro.
431 root 1.4
432 root 1.21 This method simply sets the "$coro->{desc}" member to the given
433 root 1.10 string. You can modify this member directly if you wish.
434    
435 root 1.19 GLOBAL FUNCTIONS
436 root 1.5 Coro::nready
437 root 1.21 Returns the number of coro that are currently in the ready state,
438     i.e. that can be switched to by calling "schedule" directory or
439     indirectly. The value 0 means that the only runnable coro is the
440     currently running one, so "cede" would have no effect, and
441 root 1.14 "schedule" would cause a deadlock unless there is an idle handler
442 root 1.21 that wakes up some coro.
443 root 1.5
444 root 1.6 my $guard = Coro::guard { ... }
445 root 1.21 This function still exists, but is deprecated. Please use the
446     "Guard::guard" function instead.
447 root 1.6
448 root 1.4 unblock_sub { ... }
449     This utility function takes a BLOCK or code reference and "unblocks"
450 root 1.14 it, returning a new coderef. Unblocking means that calling the new
451     coderef will return immediately without blocking, returning nothing,
452     while the original code ref will be called (with parameters) from
453 root 1.21 within another coro.
454 root 1.4
455 root 1.8 The reason this function exists is that many event libraries (such
456 root 1.21 as the venerable Event module) are not thread-safe (a weaker form of
457     reentrancy). This means you must not block within event callbacks,
458     otherwise you might suffer from crashes or worse. The only event
459     library currently known that is safe to use without "unblock_sub" is
460     EV.
461 root 1.4
462     This function allows your callbacks to block by executing them in
463 root 1.21 another coro where it is safe to block. One example where blocking
464     is handy is when you use the Coro::AIO functions to save results to
465     disk, for example.
466 root 1.4
467     In short: simply use "unblock_sub { ... }" instead of "sub { ... }"
468     when creating event callbacks that want to block.
469 root 1.1
470 root 1.14 If your handler does not plan to block (e.g. simply sends a message
471 root 1.21 to another coro, or puts some other coro into the ready queue),
472     there is no reason to use "unblock_sub".
473 root 1.14
474     Note that you also need to use "unblock_sub" for any other callbacks
475     that are indirectly executed by any C-based event loop. For example,
476     when you use a module that uses AnyEvent (and you use
477     Coro::AnyEvent) and it provides callbacks that are the result of
478     some event callback, then you must not block either, or use
479     "unblock_sub".
480    
481 root 1.18 $cb = Coro::rouse_cb
482     Create and return a "rouse callback". That's a code reference that,
483 root 1.19 when called, will remember a copy of its arguments and notify the
484 root 1.21 owner coro of the callback.
485 root 1.18
486     See the next function.
487    
488     @args = Coro::rouse_wait [$cb]
489 root 1.19 Wait for the specified rouse callback (or the last one that was
490 root 1.21 created in this coro).
491 root 1.18
492 root 1.19 As soon as the callback is invoked (or when the callback was invoked
493     before "rouse_wait"), it will return the arguments originally passed
494     to the rouse callback.
495 root 1.18
496     See the section HOW TO WAIT FOR A CALLBACK for an actual usage
497     example.
498    
499     HOW TO WAIT FOR A CALLBACK
500 root 1.21 It is very common for a coro to wait for some callback to be called.
501     This occurs naturally when you use coro in an otherwise event-based
502     program, or when you use event-based libraries.
503 root 1.18
504     These typically register a callback for some event, and call that
505 root 1.21 callback when the event occured. In a coro, however, you typically want
506     to just wait for the event, simplyifying things.
507 root 1.18
508     For example "AnyEvent->child" registers a callback to be called when a
509     specific child has exited:
510    
511     my $child_watcher = AnyEvent->child (pid => $pid, cb => sub { ... });
512    
513 root 1.21 But from within a coro, you often just want to write this:
514 root 1.18
515     my $status = wait_for_child $pid;
516    
517     Coro offers two functions specifically designed to make this easy,
518     "Coro::rouse_cb" and "Coro::rouse_wait".
519    
520     The first function, "rouse_cb", generates and returns a callback that,
521 root 1.21 when invoked, will save its arguments and notify the coro that created
522     the callback.
523 root 1.18
524     The second function, "rouse_wait", waits for the callback to be called
525     (by calling "schedule" to go to sleep) and returns the arguments
526     originally passed to the callback.
527    
528     Using these functions, it becomes easy to write the "wait_for_child"
529     function mentioned above:
530    
531     sub wait_for_child($) {
532     my ($pid) = @_;
533    
534     my $watcher = AnyEvent->child (pid => $pid, cb => Coro::rouse_cb);
535    
536     my ($rpid, $rstatus) = Coro::rouse_wait;
537     $rstatus
538     }
539    
540     In the case where "rouse_cb" and "rouse_wait" are not flexible enough,
541     you can roll your own, using "schedule":
542    
543     sub wait_for_child($) {
544     my ($pid) = @_;
545    
546 root 1.21 # store the current coro in $current,
547 root 1.18 # and provide result variables for the closure passed to ->child
548     my $current = $Coro::current;
549     my ($done, $rstatus);
550    
551     # pass a closure to ->child
552     my $watcher = AnyEvent->child (pid => $pid, cb => sub {
553     $rstatus = $_[1]; # remember rstatus
554     $done = 1; # mark $rstatus as valud
555     });
556    
557     # wait until the closure has been called
558     schedule while !$done;
559    
560     $rstatus
561     }
562    
563 root 1.1 BUGS/LIMITATIONS
564 root 1.18 fork with pthread backend
565     When Coro is compiled using the pthread backend (which isn't
566     recommended but required on many BSDs as their libcs are completely
567 root 1.21 broken), then coro will not survive a fork. There is no known
568 root 1.18 workaround except to fix your libc and use a saner backend.
569    
570     perl process emulation ("threads")
571     This module is not perl-pseudo-thread-safe. You should only ever use
572 root 1.19 this module from the first thread (this requirement might be removed
573 root 1.18 in the future to allow per-thread schedulers, but Coro::State does
574     not yet allow this). I recommend disabling thread support and using
575     processes, as having the windows process emulation enabled under
576     unix roughly halves perl performance, even when not used.
577    
578 root 1.21 coro switching is not signal safe
579     You must not switch to another coro from within a signal handler
580     (only relevant with %SIG - most event libraries provide safe
581 root 1.18 signals).
582    
583     That means you *MUST NOT* call any function that might "block" the
584 root 1.21 current coro - "cede", "schedule" "Coro::Semaphore->down" or
585 root 1.18 anything that calls those. Everything else, including calling
586     "ready", works.
587 root 1.1
588     SEE ALSO
589 root 1.14 Event-Loop integration: Coro::AnyEvent, Coro::EV, Coro::Event.
590 root 1.12
591     Debugging: Coro::Debug.
592    
593     Support/Utility: Coro::Specific, Coro::Util.
594 root 1.2
595 root 1.19 Locking and IPC: Coro::Signal, Coro::Channel, Coro::Semaphore,
596 root 1.2 Coro::SemaphoreSet, Coro::RWLock.
597    
598 root 1.19 I/O and Timers: Coro::Timer, Coro::Handle, Coro::Socket, Coro::AIO.
599 root 1.14
600 root 1.19 Compatibility with other modules: Coro::LWP (but see also AnyEvent::HTTP
601     for a better-working alternative), Coro::BDB, Coro::Storable,
602     Coro::Select.
603 root 1.12
604 root 1.14 XS API: Coro::MakeMaker.
605 root 1.2
606 root 1.19 Low level Configuration, Thread Environment, Continuations: Coro::State.
607 root 1.1
608     AUTHOR
609     Marc Lehmann <schmorp@schmorp.de>
610     http://home.schmorp.de/
611