ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/README
Revision: 1.10
Committed: Fri Oct 5 10:57:40 2007 UTC (16 years, 7 months ago) by root
Branch: MAIN
CVS Tags: rel-4_0, rel-4_01, rel-4_02
Changes since 1.9: +22 -6 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 NAME
2     Coro - coroutine process abstraction
3    
4     SYNOPSIS
5     use Coro;
6    
7     async {
8     # some asynchronous thread of execution
9     };
10    
11 root 1.4 # alternatively create an async coroutine like this:
12 root 1.1
13     sub some_func : Coro {
14     # some more async code
15     }
16    
17     cede;
18    
19     DESCRIPTION
20     This module collection manages coroutines. Coroutines are similar to
21 root 1.5 threads but don't run in parallel at the same time even on SMP machines.
22 root 1.8 The specific flavor of coroutine used in this module also guarantees you
23 root 1.5 that it will not switch between coroutines unless necessary, at
24     easily-identified points in your program, so locking and parallel access
25     are rarely an issue, making coroutine programming much safer than
26     threads programming.
27    
28     (Perl, however, does not natively support real threads but instead does
29     a very slow and memory-intensive emulation of processes using threads.
30     This is a performance win on Windows machines, and a loss everywhere
31     else).
32 root 1.1
33     In this module, coroutines are defined as "callchain + lexical variables
34 root 1.5 + @_ + $_ + $@ + $/ + C stack), that is, a coroutine has its own
35     callchain, its own set of lexicals and its own set of perls most
36 root 1.1 important global variables.
37    
38     $main
39     This coroutine represents the main program.
40    
41     $current (or as function: current)
42     The current coroutine (the last coroutine switched to). The initial
43     value is $main (of course).
44    
45 root 1.4 This variable is strictly *read-only*. It is provided for
46 root 1.8 performance reasons. If performance is not essential you are
47 root 1.4 encouraged to use the "Coro::current" function instead.
48    
49 root 1.1 $idle
50 root 1.4 A callback that is called whenever the scheduler finds no ready
51     coroutines to run. The default implementation prints "FATAL:
52     deadlock detected" and exits, because the program has no other way
53     to continue.
54    
55     This hook is overwritten by modules such as "Coro::Timer" and
56     "Coro::Event" to wait on an external event that hopefully wake up a
57     coroutine so the scheduler can run it.
58    
59     Please note that if your callback recursively invokes perl (e.g. for
60     event handlers), then it must be prepared to be called recursively.
61 root 1.1
62     STATIC METHODS
63     Static methods are actually functions that operate on the current
64 root 1.4 coroutine only.
65 root 1.1
66     async { ... } [@args...]
67 root 1.4 Create a new asynchronous coroutine and return it's coroutine object
68     (usually unused). When the sub returns the new coroutine is
69 root 1.1 automatically terminated.
70    
71 root 1.10 See the "Coro::State::new" constructor for info about the coroutine
72     environment.
73    
74 root 1.7 Calling "exit" in a coroutine will do the same as calling exit
75     outside the coroutine. Likewise, when the coroutine dies, the
76     program will exit, just as it would in the main program.
77 root 1.3
78 root 1.1 # create a new coroutine that just prints its arguments
79     async {
80     print "@_\n";
81     } 1,2,3,4;
82    
83 root 1.6 async_pool { ... } [@args...]
84     Similar to "async", but uses a coroutine pool, so you should not
85     call terminate or join (although you are allowed to), and you get a
86     coroutine that might have executed other code already (which can be
87     good or bad :).
88    
89     Also, the block is executed in an "eval" context and a warning will
90     be issued in case of an exception instead of terminating the
91     program, as "async" does. As the coroutine is being reused, stuff
92     like "on_destroy" will not work in the expected way, unless you call
93     terminate or cancel, which somehow defeats the purpose of pooling.
94    
95 root 1.10 The priority will be reset to 0 after each job, tracing will be
96     disabled, the description will be reset and the default output
97     filehandle gets restored, so you can change alkl these. Otherwise
98     the coroutine will be re-used "as-is": most notably if you change
99     other per-coroutine global stuff such as $/ you need to revert that
100     change, which is most simply done by using local as in " local $/ ".
101 root 1.6
102     The pool size is limited to 8 idle coroutines (this can be adjusted
103     by changing $Coro::POOL_SIZE), and there can be as many non-idle
104     coros as required.
105    
106     If you are concerned about pooled coroutines growing a lot because a
107     single "async_pool" used a lot of stackspace you can e.g.
108     "async_pool { terminate }" once per second or so to slowly replenish
109 root 1.9 the pool. In addition to that, when the stacks used by a handler
110     grows larger than 16kb (adjustable with $Coro::POOL_RSS) it will
111     also exit.
112 root 1.6
113 root 1.1 schedule
114 root 1.4 Calls the scheduler. Please note that the current coroutine will not
115 root 1.1 be put into the ready queue, so calling this function usually means
116 root 1.4 you will never be called again unless something else (e.g. an event
117     handler) calls ready.
118    
119     The canonical way to wait on external events is this:
120    
121     {
122     # remember current coroutine
123     my $current = $Coro::current;
124    
125     # register a hypothetical event handler
126     on_event_invoke sub {
127     # wake up sleeping coroutine
128     $current->ready;
129     undef $current;
130     };
131    
132 root 1.8 # call schedule until event occurred.
133 root 1.4 # in case we are woken up for other reasons
134     # (current still defined), loop.
135     Coro::schedule while $current;
136     }
137 root 1.1
138     cede
139 root 1.4 "Cede" to other coroutines. This function puts the current coroutine
140 root 1.1 into the ready queue and calls "schedule", which has the effect of
141     giving up the current "timeslice" to other coroutines of the same or
142     higher priority.
143    
144 root 1.6 Returns true if at least one coroutine switch has happened.
145    
146     Coro::cede_notself
147     Works like cede, but is not exported by default and will cede to any
148     coroutine, regardless of priority, once.
149    
150     Returns true if at least one coroutine switch has happened.
151    
152 root 1.1 terminate [arg...]
153 root 1.4 Terminates the current coroutine with the given status values (see
154 root 1.1 cancel).
155    
156 root 1.10 killall
157     Kills/terminates/cancels all coroutines except the currently running
158     one. This is useful after a fork, either in the child or the parent,
159     as usually only one of them should inherit the running coroutines.
160    
161 root 1.1 # dynamic methods
162    
163 root 1.4 COROUTINE METHODS
164     These are the methods you can call on coroutine objects.
165 root 1.1
166     new Coro \&sub [, @args...]
167 root 1.4 Create a new coroutine and return it. When the sub returns the
168     coroutine automatically terminates as if "terminate" with the
169     returned values were called. To make the coroutine run you must
170     first put it into the ready queue by calling the ready method.
171    
172 root 1.10 See "async" and "Coro::State::new" for additional info about the
173     coroutine environment.
174 root 1.4
175     $success = $coroutine->ready
176     Put the given coroutine into the ready queue (according to it's
177     priority) and return true. If the coroutine is already in the ready
178     queue, do nothing and return false.
179    
180     $is_ready = $coroutine->is_ready
181     Return wether the coroutine is currently the ready queue or not,
182    
183     $coroutine->cancel (arg...)
184     Terminates the given coroutine and makes it return the given
185 root 1.6 arguments as status (default: the empty list). Never returns if the
186     coroutine is the current coroutine.
187 root 1.1
188 root 1.4 $coroutine->join
189 root 1.1 Wait until the coroutine terminates and return any values given to
190 root 1.10 the "terminate" or "cancel" functions. "join" can be called
191     concurrently from multiple coroutines.
192 root 1.1
193 root 1.6 $coroutine->on_destroy (\&cb)
194     Registers a callback that is called when this coroutine gets
195     destroyed, but before it is joined. The callback gets passed the
196     terminate arguments, if any.
197    
198 root 1.4 $oldprio = $coroutine->prio ($newprio)
199 root 1.1 Sets (or gets, if the argument is missing) the priority of the
200 root 1.4 coroutine. Higher priority coroutines get run before lower priority
201     coroutines. Priorities are small signed integers (currently -4 ..
202 root 1.1 +3), that you can refer to using PRIO_xxx constants (use the import
203     tag :prio to get then):
204    
205     PRIO_MAX > PRIO_HIGH > PRIO_NORMAL > PRIO_LOW > PRIO_IDLE > PRIO_MIN
206     3 > 1 > 0 > -1 > -3 > -4
207    
208     # set priority to HIGH
209     current->prio(PRIO_HIGH);
210    
211     The idle coroutine ($Coro::idle) always has a lower priority than
212     any existing coroutine.
213    
214 root 1.4 Changing the priority of the current coroutine will take effect
215     immediately, but changing the priority of coroutines in the ready
216 root 1.1 queue (but not running) will only take effect after the next
217 root 1.4 schedule (of that coroutine). This is a bug that will be fixed in
218     some future version.
219 root 1.1
220 root 1.4 $newprio = $coroutine->nice ($change)
221 root 1.1 Similar to "prio", but subtract the given value from the priority
222     (i.e. higher values mean lower priority, just as in unix).
223    
224 root 1.4 $olddesc = $coroutine->desc ($newdesc)
225 root 1.1 Sets (or gets in case the argument is missing) the description for
226 root 1.4 this coroutine. This is just a free-form string you can associate
227     with a coroutine.
228    
229 root 1.10 This method simply sets the "$coroutine->{desc}" member to the given
230     string. You can modify this member directly if you wish.
231    
232 root 1.5 GLOBAL FUNCTIONS
233     Coro::nready
234     Returns the number of coroutines that are currently in the ready
235 root 1.8 state, i.e. that can be switched to. The value 0 means that the only
236 root 1.5 runnable coroutine is the currently running one, so "cede" would
237     have no effect, and "schedule" would cause a deadlock unless there
238     is an idle handler that wakes up some coroutines.
239    
240 root 1.6 my $guard = Coro::guard { ... }
241     This creates and returns a guard object. Nothing happens until the
242 root 1.7 object gets destroyed, in which case the codeblock given as argument
243 root 1.6 will be executed. This is useful to free locks or other resources in
244     case of a runtime error or when the coroutine gets canceled, as in
245     both cases the guard block will be executed. The guard object
246     supports only one method, "->cancel", which will keep the codeblock
247     from being executed.
248    
249     Example: set some flag and clear it again when the coroutine gets
250     canceled or the function returns:
251    
252     sub do_something {
253     my $guard = Coro::guard { $busy = 0 };
254     $busy = 1;
255    
256     # do something that requires $busy to be true
257     }
258    
259 root 1.4 unblock_sub { ... }
260     This utility function takes a BLOCK or code reference and "unblocks"
261     it, returning the new coderef. This means that the new coderef will
262     return immediately without blocking, returning nothing, while the
263     original code ref will be called (with parameters) from within its
264     own coroutine.
265    
266 root 1.8 The reason this function exists is that many event libraries (such
267 root 1.4 as the venerable Event module) are not coroutine-safe (a weaker form
268     of thread-safety). This means you must not block within event
269     callbacks, otherwise you might suffer from crashes or worse.
270    
271     This function allows your callbacks to block by executing them in
272     another coroutine where it is safe to block. One example where
273     blocking is handy is when you use the Coro::AIO functions to save
274     results to disk.
275    
276     In short: simply use "unblock_sub { ... }" instead of "sub { ... }"
277     when creating event callbacks that want to block.
278 root 1.1
279     BUGS/LIMITATIONS
280     - you must make very sure that no coro is still active on global
281     destruction. very bad things might happen otherwise (usually segfaults).
282    
283     - this module is not thread-safe. You should only ever use this module
284 root 1.8 from the same thread (this requirement might be loosened in the future
285 root 1.1 to allow per-thread schedulers, but Coro::State does not yet allow
286     this).
287    
288     SEE ALSO
289 root 1.10 Support/Utility: Coro::Specific, Coro::State, Coro::Util.
290 root 1.2
291     Locking/IPC: Coro::Signal, Coro::Channel, Coro::Semaphore,
292     Coro::SemaphoreSet, Coro::RWLock.
293    
294     Event/IO: Coro::Timer, Coro::Event, Coro::Handle, Coro::Socket,
295     Coro::Select.
296    
297     Embedding: <Coro:MakeMaker>
298 root 1.1
299     AUTHOR
300     Marc Lehmann <schmorp@schmorp.de>
301     http://home.schmorp.de/
302