ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/README
Revision: 1.11
Committed: Sat Oct 6 19:25:00 2007 UTC (16 years, 7 months ago) by root
Branch: MAIN
CVS Tags: rel-4_03
Changes since 1.10: +15 -0 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.11 $coroutine->throw ([$scalar])
233     If $throw is specified and defined, it will be thrown as an
234     exception inside the coroutine at the next convinient point in time
235     (usually after it gains control at the next schedule/transfer/cede).
236     Otherwise clears the exception object.
237    
238     The exception object will be thrown "as is" with the specified
239     scalar in $@, i.e. if it is a string, no line number or newline will
240     be appended (unlike with "die").
241    
242     This can be used as a softer means than "cancel" to ask a coroutine
243     to end itself, although there is no guarentee that the exception
244     will lead to termination, and if the exception isn't caught it might
245     well end the whole program.
246    
247 root 1.5 GLOBAL FUNCTIONS
248     Coro::nready
249     Returns the number of coroutines that are currently in the ready
250 root 1.8 state, i.e. that can be switched to. The value 0 means that the only
251 root 1.5 runnable coroutine is the currently running one, so "cede" would
252     have no effect, and "schedule" would cause a deadlock unless there
253     is an idle handler that wakes up some coroutines.
254    
255 root 1.6 my $guard = Coro::guard { ... }
256     This creates and returns a guard object. Nothing happens until the
257 root 1.7 object gets destroyed, in which case the codeblock given as argument
258 root 1.6 will be executed. This is useful to free locks or other resources in
259     case of a runtime error or when the coroutine gets canceled, as in
260     both cases the guard block will be executed. The guard object
261     supports only one method, "->cancel", which will keep the codeblock
262     from being executed.
263    
264     Example: set some flag and clear it again when the coroutine gets
265     canceled or the function returns:
266    
267     sub do_something {
268     my $guard = Coro::guard { $busy = 0 };
269     $busy = 1;
270    
271     # do something that requires $busy to be true
272     }
273    
274 root 1.4 unblock_sub { ... }
275     This utility function takes a BLOCK or code reference and "unblocks"
276     it, returning the new coderef. This means that the new coderef will
277     return immediately without blocking, returning nothing, while the
278     original code ref will be called (with parameters) from within its
279     own coroutine.
280    
281 root 1.8 The reason this function exists is that many event libraries (such
282 root 1.4 as the venerable Event module) are not coroutine-safe (a weaker form
283     of thread-safety). This means you must not block within event
284     callbacks, otherwise you might suffer from crashes or worse.
285    
286     This function allows your callbacks to block by executing them in
287     another coroutine where it is safe to block. One example where
288     blocking is handy is when you use the Coro::AIO functions to save
289     results to disk.
290    
291     In short: simply use "unblock_sub { ... }" instead of "sub { ... }"
292     when creating event callbacks that want to block.
293 root 1.1
294     BUGS/LIMITATIONS
295     - you must make very sure that no coro is still active on global
296     destruction. very bad things might happen otherwise (usually segfaults).
297    
298     - this module is not thread-safe. You should only ever use this module
299 root 1.8 from the same thread (this requirement might be loosened in the future
300 root 1.1 to allow per-thread schedulers, but Coro::State does not yet allow
301     this).
302    
303     SEE ALSO
304 root 1.10 Support/Utility: Coro::Specific, Coro::State, Coro::Util.
305 root 1.2
306     Locking/IPC: Coro::Signal, Coro::Channel, Coro::Semaphore,
307     Coro::SemaphoreSet, Coro::RWLock.
308    
309     Event/IO: Coro::Timer, Coro::Event, Coro::Handle, Coro::Socket,
310     Coro::Select.
311    
312     Embedding: <Coro:MakeMaker>
313 root 1.1
314     AUTHOR
315     Marc Lehmann <schmorp@schmorp.de>
316     http://home.schmorp.de/
317