ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/README
Revision: 1.7
Committed: Mon Apr 16 13:26:43 2007 UTC (17 years, 1 month ago) by root
Branch: MAIN
Changes since 1.6: +5 -8 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     The specific flavor of coroutine use din this module also guarentees you
23     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     performance reasons. If performance is not essentiel you are
47     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.7 Calling "exit" in a coroutine will do the same as calling exit
72     outside the coroutine. Likewise, when the coroutine dies, the
73     program will exit, just as it would in the main program.
74 root 1.3
75 root 1.1 # create a new coroutine that just prints its arguments
76     async {
77     print "@_\n";
78     } 1,2,3,4;
79    
80 root 1.6 async_pool { ... } [@args...]
81     Similar to "async", but uses a coroutine pool, so you should not
82     call terminate or join (although you are allowed to), and you get a
83     coroutine that might have executed other code already (which can be
84     good or bad :).
85    
86     Also, the block is executed in an "eval" context and a warning will
87     be issued in case of an exception instead of terminating the
88     program, as "async" does. As the coroutine is being reused, stuff
89     like "on_destroy" will not work in the expected way, unless you call
90     terminate or cancel, which somehow defeats the purpose of pooling.
91    
92     The priority will be reset to 0 after each job, otherwise the
93     coroutine will be re-used "as-is".
94    
95     The pool size is limited to 8 idle coroutines (this can be adjusted
96     by changing $Coro::POOL_SIZE), and there can be as many non-idle
97     coros as required.
98    
99     If you are concerned about pooled coroutines growing a lot because a
100     single "async_pool" used a lot of stackspace you can e.g.
101     "async_pool { terminate }" once per second or so to slowly replenish
102     the pool.
103    
104 root 1.1 schedule
105 root 1.4 Calls the scheduler. Please note that the current coroutine will not
106 root 1.1 be put into the ready queue, so calling this function usually means
107 root 1.4 you will never be called again unless something else (e.g. an event
108     handler) calls ready.
109    
110     The canonical way to wait on external events is this:
111    
112     {
113     # remember current coroutine
114     my $current = $Coro::current;
115    
116     # register a hypothetical event handler
117     on_event_invoke sub {
118     # wake up sleeping coroutine
119     $current->ready;
120     undef $current;
121     };
122    
123     # call schedule until event occured.
124     # in case we are woken up for other reasons
125     # (current still defined), loop.
126     Coro::schedule while $current;
127     }
128 root 1.1
129     cede
130 root 1.4 "Cede" to other coroutines. This function puts the current coroutine
131 root 1.1 into the ready queue and calls "schedule", which has the effect of
132     giving up the current "timeslice" to other coroutines of the same or
133     higher priority.
134    
135 root 1.6 Returns true if at least one coroutine switch has happened.
136    
137     Coro::cede_notself
138     Works like cede, but is not exported by default and will cede to any
139     coroutine, regardless of priority, once.
140    
141     Returns true if at least one coroutine switch has happened.
142    
143 root 1.1 terminate [arg...]
144 root 1.4 Terminates the current coroutine with the given status values (see
145 root 1.1 cancel).
146    
147     # dynamic methods
148    
149 root 1.4 COROUTINE METHODS
150     These are the methods you can call on coroutine objects.
151 root 1.1
152     new Coro \&sub [, @args...]
153 root 1.4 Create a new coroutine and return it. When the sub returns the
154     coroutine automatically terminates as if "terminate" with the
155     returned values were called. To make the coroutine run you must
156     first put it into the ready queue by calling the ready method.
157    
158 root 1.7 See "async" for additional discussion.
159 root 1.4
160     $success = $coroutine->ready
161     Put the given coroutine into the ready queue (according to it's
162     priority) and return true. If the coroutine is already in the ready
163     queue, do nothing and return false.
164    
165     $is_ready = $coroutine->is_ready
166     Return wether the coroutine is currently the ready queue or not,
167    
168     $coroutine->cancel (arg...)
169     Terminates the given coroutine and makes it return the given
170 root 1.6 arguments as status (default: the empty list). Never returns if the
171     coroutine is the current coroutine.
172 root 1.1
173 root 1.4 $coroutine->join
174 root 1.1 Wait until the coroutine terminates and return any values given to
175     the "terminate" or "cancel" functions. "join" can be called multiple
176 root 1.4 times from multiple coroutine.
177 root 1.1
178 root 1.6 $coroutine->on_destroy (\&cb)
179     Registers a callback that is called when this coroutine gets
180     destroyed, but before it is joined. The callback gets passed the
181     terminate arguments, if any.
182    
183 root 1.4 $oldprio = $coroutine->prio ($newprio)
184 root 1.1 Sets (or gets, if the argument is missing) the priority of the
185 root 1.4 coroutine. Higher priority coroutines get run before lower priority
186     coroutines. Priorities are small signed integers (currently -4 ..
187 root 1.1 +3), that you can refer to using PRIO_xxx constants (use the import
188     tag :prio to get then):
189    
190     PRIO_MAX > PRIO_HIGH > PRIO_NORMAL > PRIO_LOW > PRIO_IDLE > PRIO_MIN
191     3 > 1 > 0 > -1 > -3 > -4
192    
193     # set priority to HIGH
194     current->prio(PRIO_HIGH);
195    
196     The idle coroutine ($Coro::idle) always has a lower priority than
197     any existing coroutine.
198    
199 root 1.4 Changing the priority of the current coroutine will take effect
200     immediately, but changing the priority of coroutines in the ready
201 root 1.1 queue (but not running) will only take effect after the next
202 root 1.4 schedule (of that coroutine). This is a bug that will be fixed in
203     some future version.
204 root 1.1
205 root 1.4 $newprio = $coroutine->nice ($change)
206 root 1.1 Similar to "prio", but subtract the given value from the priority
207     (i.e. higher values mean lower priority, just as in unix).
208    
209 root 1.4 $olddesc = $coroutine->desc ($newdesc)
210 root 1.1 Sets (or gets in case the argument is missing) the description for
211 root 1.4 this coroutine. This is just a free-form string you can associate
212     with a coroutine.
213    
214 root 1.5 GLOBAL FUNCTIONS
215     Coro::nready
216     Returns the number of coroutines that are currently in the ready
217     state, i.e. that can be swicthed to. The value 0 means that the only
218     runnable coroutine is the currently running one, so "cede" would
219     have no effect, and "schedule" would cause a deadlock unless there
220     is an idle handler that wakes up some coroutines.
221    
222 root 1.6 my $guard = Coro::guard { ... }
223     This creates and returns a guard object. Nothing happens until the
224 root 1.7 object gets destroyed, in which case the codeblock given as argument
225 root 1.6 will be executed. This is useful to free locks or other resources in
226     case of a runtime error or when the coroutine gets canceled, as in
227     both cases the guard block will be executed. The guard object
228     supports only one method, "->cancel", which will keep the codeblock
229     from being executed.
230    
231     Example: set some flag and clear it again when the coroutine gets
232     canceled or the function returns:
233    
234     sub do_something {
235     my $guard = Coro::guard { $busy = 0 };
236     $busy = 1;
237    
238     # do something that requires $busy to be true
239     }
240    
241 root 1.4 unblock_sub { ... }
242     This utility function takes a BLOCK or code reference and "unblocks"
243     it, returning the new coderef. This means that the new coderef will
244     return immediately without blocking, returning nothing, while the
245     original code ref will be called (with parameters) from within its
246     own coroutine.
247    
248     The reason this fucntion exists is that many event libraries (such
249     as the venerable Event module) are not coroutine-safe (a weaker form
250     of thread-safety). This means you must not block within event
251     callbacks, otherwise you might suffer from crashes or worse.
252    
253     This function allows your callbacks to block by executing them in
254     another coroutine where it is safe to block. One example where
255     blocking is handy is when you use the Coro::AIO functions to save
256     results to disk.
257    
258     In short: simply use "unblock_sub { ... }" instead of "sub { ... }"
259     when creating event callbacks that want to block.
260 root 1.1
261     BUGS/LIMITATIONS
262     - you must make very sure that no coro is still active on global
263     destruction. very bad things might happen otherwise (usually segfaults).
264    
265     - this module is not thread-safe. You should only ever use this module
266     from the same thread (this requirement might be losened in the future
267     to allow per-thread schedulers, but Coro::State does not yet allow
268     this).
269    
270     SEE ALSO
271 root 1.2 Support/Utility: Coro::Cont, Coro::Specific, Coro::State, Coro::Util.
272    
273     Locking/IPC: Coro::Signal, Coro::Channel, Coro::Semaphore,
274     Coro::SemaphoreSet, Coro::RWLock.
275    
276     Event/IO: Coro::Timer, Coro::Event, Coro::Handle, Coro::Socket,
277     Coro::Select.
278    
279     Embedding: <Coro:MakeMaker>
280 root 1.1
281     AUTHOR
282     Marc Lehmann <schmorp@schmorp.de>
283     http://home.schmorp.de/
284