ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Coro/State.pm
Revision: 1.134
Committed: Mon Nov 24 07:55:28 2008 UTC (15 years, 6 months ago) by root
Branch: MAIN
CVS Tags: rel-5_1
Changes since 1.133: +1 -1 lines
Log Message:
5.1

File Contents

# Content
1 =head1 NAME
2
3 Coro::State - first class continuations
4
5 =head1 SYNOPSIS
6
7 use Coro::State;
8
9 $new = new Coro::State sub {
10 print "in coroutine (called with @_), switching back\n";
11 $new->transfer ($main);
12 print "in coroutine again, switching back\n";
13 $new->transfer ($main);
14 }, 5;
15
16 $main = new Coro::State;
17
18 print "in main, switching to coroutine\n";
19 $main->transfer ($new);
20 print "back in main, switch to coroutine again\n";
21 $main->transfer ($new);
22 print "back in main\n";
23
24 =head1 DESCRIPTION
25
26 This module implements coroutines. Coroutines, similar to continuations,
27 allow you to run more than one "thread of execution" in parallel. Unlike
28 threads, there is no parallelism and only voluntary switching is used so
29 locking problems are greatly reduced.
30
31 This can be used to implement non-local jumps, exception handling,
32 (non-clonable) continuations and more.
33
34 This module provides only low-level functionality. See L<Coro> and related
35 modules for a higher level process abstraction including scheduling.
36
37 =head2 MODEL
38
39 Coro::State implements two different coroutine models: Perl and C. The
40 C coroutines (called cctx's) are basically simplified perl interpreters
41 running/interpreting the Perl coroutines. A single interpreter can run any
42 number of Perl coroutines, so usually there are very few C coroutines.
43
44 When Perl code calls a C function (e.g. in an extension module) and that
45 C function then calls back into Perl or does a coroutine switch the C
46 coroutine can no longer execute other Perl coroutines, so it stays tied to
47 the specific coroutine until it returns to the original Perl caller, after
48 which it is again available to run other Perl coroutines.
49
50 The main program always has its own "C coroutine" (which really is
51 *the* Perl interpreter running the whole program), so there will always
52 be at least one additional C coroutine. You can use the debugger (see
53 L<Coro::Debug>) to find out which coroutines are tied to their cctx and
54 which aren't.
55
56 =head2 MEMORY CONSUMPTION
57
58 A newly created coroutine that has not been used only allocates a
59 relatively small (a hundred bytes) structure. Only on the first
60 C<transfer> will perl allocate stacks (a few kb, 64 bit architetcures
61 use twice as much, i.e. a few kb :) and optionally a C stack/coroutine
62 (cctx) for coroutines that recurse through C functions. All this is very
63 system-dependent. On my x86-pc-linux-gnu system this amounts to about 2k
64 per (non-trivial but simple) coroutine.
65
66 You can view the actual memory consumption using Coro::Debug. Keep in mind
67 that a for loop or other block constructs can easily consume 100-200 bytes
68 per nesting level.
69
70 =cut
71
72 package Coro::State;
73
74 use strict;
75 no warnings "uninitialized";
76
77 use Carp;
78
79 use Time::HiRes (); # currently only used for PerlIO::cede
80
81 our $DIEHOOK;
82 our $WARNHOOK;
83
84 BEGIN {
85 $DIEHOOK = sub { };
86 $WARNHOOK = sub { warn $_[0] };
87 }
88
89 sub diehook { &$DIEHOOK }
90 sub warnhook { &$WARNHOOK }
91
92 use XSLoader;
93
94 BEGIN {
95 our $VERSION = 5.1;
96
97 # must be done here because the xs part expects it to exist
98 # it might exist already because Coro::Specific created it.
99 $Coro::current ||= { };
100
101 {
102 # save/restore the handlers before/after overwriting %SIG magic
103 local $SIG{__DIE__};
104 local $SIG{__WARN__};
105
106 XSLoader::load __PACKAGE__, $VERSION;
107 }
108
109 # need to do it after overwriting the %SIG magic
110 $SIG{__DIE__} ||= \&diehook;
111 $SIG{__WARN__} ||= \&warnhook;
112 }
113
114 use Exporter;
115 use base Exporter::;
116
117 =head2 GLOBAL VARIABLES
118
119 =over 4
120
121 =item $Coro::State::DIEHOOK
122
123 This works similarly to C<$SIG{__DIE__}> and is used as the default die
124 hook for newly created coroutines. This is useful if you want some generic
125 logging function that works for all coroutines that don't set their own
126 hook.
127
128 When Coro::State is first loaded it will install these handlers for the
129 main program, too, unless they have been overwritten already.
130
131 The default handlers provided will behave like the built-in ones (as if
132 they weren't there).
133
134 If you don't want to exit your program on uncaught exceptions, you can
135 must not return from your die hook - terminate instead.
136
137 Note 1: You I<must> store a valid code reference in these variables,
138 C<undef> will I<not> do.
139
140 Note 2: The value of this variable will be shared among all coroutines, so
141 changing its value will change it in all coroutines that don't have their
142 own die handler.
143
144 =item $Coro::State::WARNHOOK
145
146 Similar to above die hook, but augments C<$SIG{__WARN__}>.
147
148 =back
149
150 =head2 FUNCTIONS
151
152 =over 4
153
154 =item $coro = new Coro::State [$coderef[, @args...]]
155
156 Create a new coroutine and return it. The first C<transfer> call to this
157 coroutine will start execution at the given coderef, with the given
158 arguments.
159
160 Note that the arguments will not be copied. Instead, as with normal
161 function calls, the coroutine receives passed arguments by reference, so
162 make sure you don't change them in unexpected ways.
163
164 Returning from such a coroutine is I<NOT> supported. Neither is calling
165 C<exit> or throwing an uncaught exception. The following paragraphs
166 describe what happens in current versions of Coro.
167
168 If the subroutine returns the program will be terminated as if execution
169 of the main program ended.
170
171 If it throws an exception the program will terminate unless the exception
172 is caught, exactly like in the main program.
173
174 Calling C<exit> in a coroutine does the same as calling it in the main
175 program, but due to libc bugs on many BSDs, this doesn't work reliable
176 everywhere.
177
178 If the coderef is omitted this function will create a new "empty"
179 coroutine, i.e. a coroutine that cannot be transfered to but can be used
180 to save the current coroutine state in (note that this is dangerous, as no
181 reference is taken to ensure that the "current coroutine state" survives,
182 the caller is responsible to ensure that the cloned state does not go
183 away).
184
185 The returned object is an empty hash which can be used for any purpose
186 whatsoever, for example when subclassing Coro::State.
187
188 Certain variables are "localised" to each coroutine, that is, certain
189 "global" variables are actually per coroutine. Not everything that would
190 sensibly be localised currently is, and not everything that is localised
191 makes sense for every application, and the future might bring changes.
192
193 The following global variables can have different values per coroutine,
194 and have the stated initial values:
195
196 Variable Initial Value
197 @_ whatever arguments were passed to the Coro
198 $_ undef
199 $@ undef
200 $/ "\n"
201 $SIG{__DIE__} aliased to $Coro::State::DIEHOOK(*)
202 $SIG{__WARN__} aliased to $Coro::State::WARNHOOK(*)
203 (default fh) *STDOUT
204 $^H, %^H zero/empty.
205 $1, $2... all regex results are initially undefined
206
207 (*) reading the value from %SIG is not supported, but local'ising is.
208
209 If you feel that something important is missing then tell me. Also
210 remember that every function call that might call C<transfer> (such
211 as C<Coro::Channel::put>) might clobber any global and/or special
212 variables. Yes, this is by design ;) You can always create your own
213 process abstraction model that saves these variables.
214
215 The easiest way to do this is to create your own scheduling primitive like
216 in the code below, and use it in your coroutines:
217
218 sub my_cede {
219 local ($;, ...);
220 Coro::cede;
221 }
222
223 =cut
224
225 =item $state->throw ([$scalar])
226
227 See L<< Coro->throw >>.
228
229 =item $state->call ($coderef)
230
231 Try to call the given C<$coderef> in the context of the given state. This
232 works even when the state is currently within an XS function, and can
233 be very dangerous. You can use it to acquire stack traces etc. (see the
234 Coro::Debug module for more details). The coderef MUST NOT EVER transfer
235 to another state.
236
237 =item $state->eval ($string)
238
239 Like C<call>, but eval's the string. Dangerous.
240
241 =item $state->swap_defsv
242
243 =item $state->swap_defav
244
245 Swap the current C<$_> (swap_defsv) or C<@_> (swap_defav) with the
246 equivalent in the saved state of C<$state>. This can be used to give the
247 coroutine a defined content for C<@_> and C<$_> before transfer'ing to it.
248
249 =item $state->trace ($flags)
250
251 Internal function to control tracing. I just mention this so you can stay
252 away from abusing it.
253
254 =item $prev->transfer ($next)
255
256 Save the state of the current subroutine in C<$prev> and switch to the
257 coroutine saved in C<$next>.
258
259 The "state" of a subroutine includes the scope, i.e. lexical variables and
260 the current execution state (subroutine, stack).
261
262 =item $bytes = $state->rss
263
264 Returns the memory allocated by the coroutine (which includes static
265 structures, various perl stacks but NOT local variables, arguments or any
266 C context data). This is a rough indication of how much memory it might
267 use.
268
269 =item $state->has_cctx
270
271 Returns whether the state currently uses a cctx/C context. An active
272 state always has a cctx, as well as the main program. Other states only
273 use a cctxts when needed.
274
275 =item Coro::State::force_cctx
276
277 Forces the allocation of a C context for the currently running coroutine
278 (if not already done). Apart from benchmarking there is little point
279 in doing so, however.
280
281 =item $ncctx = Coro::State::cctx_count
282
283 Returns the number of C-level coroutines allocated. If this number is
284 very high (more than a dozen) it might help to identify points of C-level
285 recursion in your code and moving this into a separate coroutine.
286
287 =item $nidle = Coro::State::cctx_idle
288
289 Returns the number of allocated but idle (free for reuse) C level
290 coroutines. Currently, Coro will limit the number of idle/unused cctxs to
291 8.
292
293 =item $old = Coro::State::cctx_stacksize [$new_stacksize]
294
295 Returns the current C stack size and optionally sets the new I<minimum>
296 stack size to C<$new_stacksize> I<long>s. Existing stacks will not
297 be changed, but Coro will try to replace smaller stacks as soon as
298 possible. Any Coro::State that starts to use a stack after this call is
299 guaranteed this minimum stack size.
300
301 Please note that Coroutines will only need to use a C-level stack if the
302 interpreter recurses or calls a function in a module that calls back into
303 the interpreter, so use of this feature is usually never needed.
304
305 =item $old = Coro::State::cctx_max_idle [$new_count]
306
307 Coro caches C contexts that are not in use currently, as creating them
308 from scratch has some overhead.
309
310 This function returns the current maximum number of idle C contexts and
311 optionally sets the new amount. The count must be at least C<1>, with the
312 default being C<4>.
313
314 =item @states = Coro::State::list
315
316 Returns a list of all states currently allocated.
317
318 =item $clone = $state->clone
319
320 This exciting method takes a Coro::State object and clones, i.e., creates
321 a copy. This makes it possible to restore a state more than once.
322
323 Since its only known purpose is intellectual self-gratification, and
324 because it is a difficult piece of code, it is not enabled by default, and
325 not supported.
326
327 Among the games you can play with this is implement a scheme-like call/cc,
328 as the following code does (well, with small differences).
329
330 sub callcc(&@) {
331 my ($func, @arg) = @_;
332
333 my $state = new Coro::State;
334 my $wrapper; $wrapper = new Coro::State sub {
335 my $escape = sub {
336 @arg = @_;
337 $wrapper->transfer ($state->clone);
338 };
339 $escape->($func->($escape, @arg));
340 };
341
342 $state->transfer ($wrapper);
343 @arg
344 }
345
346 Here are a few little-known facts: First, coroutines *are* full/true/real
347 continuations. Secondly Coro::State objects (without clone) *are* first
348 class continuations. Thirdly, nobody has ever found a use for the full
349 power of call/cc that isn't better (faster, easier, more efficient)
350 implemented differently, and nobody has yet found a useful control
351 construct that can't be implemented without it already, just much faster
352 and with fewer resources.
353
354 Besides, call/cc is much less useful in a Perl-like dynamic language (with
355 references, and its scoping rules) then in, say, scheme.
356
357 Now, the known limitations of C<clone>:
358
359 It probably only works on perl 5.10; it cannot clone a coroutine inside
360 the substition operator (but windows perl can't fork from there either)
361 and some other contexts, and C<abort ()> is the preferred mechanism to
362 signal errors. It cannot clone a state that has a c context attached
363 (implementing clone on the C level is too hard for me to even try),
364 which rules out calling call/cc from the main coroutine. It cannot
365 clone a context that hasn't even been started yet. It doesn't work with
366 C<-DDEBUGGING> (but what does). It probably also leaks, and sometimes
367 triggers a few assertions inside Coro. Most of these limitations *are*
368 fixable with some effort, but that's pointless just to make a point that
369 it could be done.
370
371 =cut
372
373 # used by Coro::Debug only atm.
374 sub debug_desc {
375 $_[0]{desc}
376 }
377
378 # for very deep reasons, we must initialise $Coro::main here.
379
380 {
381 package Coro;
382
383 our $main; # main coroutine
384 our $current; # current coroutine
385
386 $main = Coro::State::new Coro::;
387
388 $main->{desc} = "[main::]";
389
390 # maybe some other module used Coro::Specific before...
391 $main->{_specific} = $current->{_specific}
392 if $current;
393
394 _set_current $main;
395 }
396
397 1;
398
399 =back
400
401 =head1 BUGS
402
403 This module is not thread-safe. You must only ever use this module from
404 the same thread (this requirement might be removed in the future).
405
406 =head1 SEE ALSO
407
408 L<Coro>.
409
410 =head1 AUTHOR
411
412 Marc Lehmann <schmorp@schmorp.de>
413 http://home.schmorp.de/
414
415 =cut
416