ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Coro/State.pm
Revision: 1.161
Committed: Thu Jan 13 14:35:01 2011 UTC (13 years, 4 months ago) by root
Branch: MAIN
Changes since 1.160: +16 -15 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3 root 1.132 Coro::State - first class continuations
4 root 1.1
5     =head1 SYNOPSIS
6    
7     use Coro::State;
8    
9     $new = new Coro::State sub {
10 root 1.140 print "in coro (called with @_), switching back\n";
11 root 1.43 $new->transfer ($main);
12 root 1.140 print "in coro again, switching back\n";
13 root 1.43 $new->transfer ($main);
14 root 1.3 }, 5;
15 root 1.1
16     $main = new Coro::State;
17    
18 root 1.140 print "in main, switching to coro\n";
19 root 1.43 $main->transfer ($new);
20 root 1.140 print "back in main, switch to coro again\n";
21 root 1.43 $main->transfer ($new);
22 root 1.1 print "back in main\n";
23    
24     =head1 DESCRIPTION
25    
26 root 1.140 This module implements coro. Coros, similar to threads and continuations,
27 root 1.1 allow you to run more than one "thread of execution" in parallel. Unlike
28 root 1.140 so-called "kernel" threads, there is no parallelism and only voluntary
29     switching is used so locking problems are greatly reduced. The latter is
30     called "cooperative" threading as opposed to "preemptive" threading.
31 root 1.42
32     This can be used to implement non-local jumps, exception handling,
33 root 1.140 continuation objects and more.
34 root 1.1
35     This module provides only low-level functionality. See L<Coro> and related
36 root 1.140 modules for a higher level threads abstraction including a scheduler.
37 root 1.1
38 root 1.86 =head2 MODEL
39    
40 root 1.140 Coro::State implements two different thread models: Perl and C. The C
41     threads (called cctx's) are basically simplified perl interpreters
42     running/interpreting the Perl threads. A single interpreter can run any
43     number of Perl threads, so usually there are very few C threads.
44    
45     When Perl code calls a C function (e.g. in an extension module) and that C
46     function then calls back into Perl or transfers control to another thread,
47     the C thread can no longer execute other Perl threads, so it stays tied to
48     the specific thread until it returns to the original Perl caller, after
49     which it is again available to run other Perl threads.
50 root 1.86
51 root 1.140 The main program always has its own "C thread" (which really is
52 root 1.86 *the* Perl interpreter running the whole program), so there will always
53 root 1.140 be at least one additional C thread. You can use the debugger (see
54     L<Coro::Debug>) to find out which threads are tied to their cctx and
55 root 1.86 which aren't.
56    
57 root 1.9 =head2 MEMORY CONSUMPTION
58    
59 root 1.140 A newly created Coro::State that has not been used only allocates a
60 root 1.84 relatively small (a hundred bytes) structure. Only on the first
61 root 1.94 C<transfer> will perl allocate stacks (a few kb, 64 bit architetcures
62 root 1.140 use twice as much, i.e. a few kb :) and optionally a C stack/thread
63     (cctx) for threads that recurse through C functions. All this is very
64 root 1.94 system-dependent. On my x86-pc-linux-gnu system this amounts to about 2k
65 root 1.140 per (non-trivial but simple) Coro::State.
66 root 1.94
67     You can view the actual memory consumption using Coro::Debug. Keep in mind
68     that a for loop or other block constructs can easily consume 100-200 bytes
69     per nesting level.
70 root 1.1
71     =cut
72    
73     package Coro::State;
74    
75 root 1.153 use common::sense;
76 root 1.47
77 root 1.84 use Carp;
78 root 1.87
79 root 1.109 use Time::HiRes (); # currently only used for PerlIO::cede
80    
81 root 1.87 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 root 1.84
92 root 1.47 use XSLoader;
93 root 1.18
94 root 1.1 BEGIN {
95 root 1.159 our $VERSION = 5.25;
96 root 1.1
97 root 1.67 # 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 root 1.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 root 1.1 }
113    
114 root 1.51 use Exporter;
115 root 1.47 use base Exporter::;
116 root 1.5
117 root 1.84 =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 root 1.140 hook for newly created Coro::States. This is useful if you want some generic
125     logging function that works for all threads that don't set their own
126 root 1.84 hook.
127    
128     When Coro::State is first loaded it will install these handlers for the
129 root 1.101 main program, too, unless they have been overwritten already.
130 root 1.84
131 root 1.100 The default handlers provided will behave like the built-in ones (as if
132 root 1.84 they weren't there).
133    
134 root 1.150 If you don't want to exit your program on uncaught exceptions, you must
135     not return from your die hook - call C<Coro::terminate> instead.
136 root 1.125
137 root 1.94 Note 1: You I<must> store a valid code reference in these variables,
138     C<undef> will I<not> do.
139 root 1.84
140 root 1.140 Note 2: The value of this variable will be shared among all threads, so
141     changing its value will change it in all threads that don't have their
142 root 1.100 own die handler.
143 root 1.84
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 root 1.65 =item $coro = new Coro::State [$coderef[, @args...]]
155 root 1.1
156 root 1.140 Create a new Coro::State thread object and return it. The first
157     C<transfer> call to this thread will start execution at the given
158     coderef, with the given arguments.
159 root 1.125
160     Note that the arguments will not be copied. Instead, as with normal
161 root 1.140 function calls, the thread receives passed arguments by reference, so
162 root 1.125 make sure you don't change them in unexpected ways.
163    
164 root 1.140 Returning from such a thread is I<NOT> supported. Neither is calling
165 root 1.125 C<exit> or throwing an uncaught exception. The following paragraphs
166     describe what happens in current versions of Coro.
167 root 1.94
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 root 1.74
174 root 1.140 Calling C<exit> in a thread does the same as calling it in the main
175 root 1.133 program, but due to libc bugs on many BSDs, this doesn't work reliable
176     everywhere.
177 root 1.1
178     If the coderef is omitted this function will create a new "empty"
179 root 1.140 thread, i.e. a thread that cannot be transfered to but can be used
180     to save the current thread state in (note that this is dangerous, as no
181     reference is taken to ensure that the "current thread state" survives,
182 root 1.104 the caller is responsible to ensure that the cloned state does not go
183     away).
184 root 1.1
185 root 1.55 The returned object is an empty hash which can be used for any purpose
186     whatsoever, for example when subclassing Coro::State.
187    
188 root 1.140 Certain variables are "localised" to each thread, that is, certain
189     "global" variables are actually per thread. Not everything that would
190 root 1.79 sensibly be localised currently is, and not everything that is localised
191     makes sense for every application, and the future might bring changes.
192 root 1.1
193 root 1.140 The following global variables can have different values per thread,
194 root 1.84 and have the stated initial values:
195 root 1.5
196 root 1.83 Variable Initial Value
197     @_ whatever arguments were passed to the Coro
198     $_ undef
199     $@ undef
200     $/ "\n"
201 root 1.88 $SIG{__DIE__} aliased to $Coro::State::DIEHOOK(*)
202     $SIG{__WARN__} aliased to $Coro::State::WARNHOOK(*)
203 root 1.83 (default fh) *STDOUT
204 root 1.133 $^H, %^H zero/empty.
205 root 1.84 $1, $2... all regex results are initially undefined
206 root 1.2
207 root 1.88 (*) reading the value from %SIG is not supported, but local'ising is.
208    
209 root 1.70 If you feel that something important is missing then tell me. Also
210 root 1.2 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 root 1.1
215 root 1.9 The easiest way to do this is to create your own scheduling primitive like
216 root 1.140 in the code below, and use it in your threads:
217 root 1.1
218 root 1.84 sub my_cede {
219 root 1.80 local ($;, ...);
220 root 1.84 Coro::cede;
221 root 1.1 }
222    
223 root 1.140 Another way is to use dynamic winders, see C<Coro::on_enter> and
224     C<Coro::on_leave> for this.
225    
226 root 1.160 Yet another way that works onyl for variables is C<< ->swap_sv >>.
227    
228 root 1.140 =item $prev->transfer ($next)
229    
230     Save the state of the current subroutine in C<$prev> and switch to the
231     thread saved in C<$next>.
232    
233     The "state" of a subroutine includes the scope, i.e. lexical variables and
234     the current execution state (subroutine, stack).
235    
236     =item $state->is_new
237    
238     Returns true iff this Coro::State object is "new", i.e. has never been run
239     yet. Those states basically consist of only the code reference to call and
240     the arguments, but consumes very little other resources. New states will
241     automatically get assigned a perl interpreter when they are transfered to.
242    
243     =item $state->is_destroyed
244    
245     Returns true iff the Coro::State object has been destroyed (by
246     C<cancel>), i.e. it's resources freed because they were C<cancel>'d (or
247     C<terminate>'d).
248    
249     =item $state->cancel
250    
251     Forcefully destructs the given Coro::State. While you can keep the
252     reference, and some memory is still allocated, the Coro::State object is
253     effecticely dead, destructors have been freed, it cannot be transfered to
254     anymore.
255 root 1.79
256 root 1.119 =item $state->throw ([$scalar])
257    
258     See L<< Coro->throw >>.
259    
260 root 1.76 =item $state->call ($coderef)
261    
262 root 1.94 Try to call the given C<$coderef> in the context of the given state. This
263 root 1.76 works even when the state is currently within an XS function, and can
264     be very dangerous. You can use it to acquire stack traces etc. (see the
265     Coro::Debug module for more details). The coderef MUST NOT EVER transfer
266     to another state.
267    
268     =item $state->eval ($string)
269    
270 root 1.94 Like C<call>, but eval's the string. Dangerous.
271 root 1.76
272 root 1.90 =item $state->swap_defsv
273    
274     =item $state->swap_defav
275    
276     Swap the current C<$_> (swap_defsv) or C<@_> (swap_defav) with the
277     equivalent in the saved state of C<$state>. This can be used to give the
278 root 1.140 coro a defined content for C<@_> and C<$_> before transfer'ing to it.
279 root 1.90
280 root 1.154 =item $state->swap_sv (\$sv, \$swap_sv)
281    
282     This (very advanced) function can be used to make I<any> variable local to
283     a thread.
284    
285     It works by swapping the contents of C<$sv> and C<$swap_sv> each time the
286 root 1.160 thread is entered and left again, i.e. it is similar to:
287 root 1.154
288     $tmp = $sv; $sv = $swap_sv; $swap_sv = $tmp;
289    
290     Except that it doesn't make an copies and works on hashes and even more
291     exotic values (code references!).
292    
293     Needless to say, this function can be very very dangerous: you can easily
294     swap a hash with a reference (i.e. C<%hash> I<becomes> a reference), and perl
295     will not like this at all.
296    
297     It will also swap "magicalness" - so when swapping a builtin perl variable
298     (such as C<$.>), it will lose it's magicalness, which, again, perl will
299     not like, so don't do it.
300    
301     Lastly, the C<$swap_sv> itself will be used, not a copy, so make sure you
302     give each thread it's own C<$swap_sv> instance.
303    
304     It is, however, quite safe to swap some normal variable with
305     another. For example, L<PApp::SQL> stores the default database handle in
306     C<$PApp::SQL::DBH>. To make this a per-thread variable, use this:
307    
308     my $private_dbh = ...;
309     $coro->swap_sv (\$PApp::SQL::DBH, \$private_dbh);
310    
311     This results in C<$PApp::SQL::DBH> having the value of C<$private_dbh>
312     while it executes, and whatever other value it had when it doesn't
313     execute.
314    
315     You can also swap hashes and other values:
316    
317     my %private_hash;
318     $coro->swap_sv (\%some_hash, \%private_hash);
319    
320 root 1.77 =item $state->trace ($flags)
321    
322     Internal function to control tracing. I just mention this so you can stay
323 root 1.90 away from abusing it.
324 root 1.77
325 root 1.117 =item $bytes = $state->rss
326    
327 root 1.140 Returns the memory allocated by the coro (which includes static
328 root 1.117 structures, various perl stacks but NOT local variables, arguments or any
329     C context data). This is a rough indication of how much memory it might
330     use.
331    
332 root 1.94 =item $state->has_cctx
333    
334 root 1.117 Returns whether the state currently uses a cctx/C context. An active
335 root 1.94 state always has a cctx, as well as the main program. Other states only
336     use a cctxts when needed.
337    
338 root 1.117 =item Coro::State::force_cctx
339 root 1.94
340 root 1.140 Forces the allocation of a C context for the currently running coro
341 root 1.117 (if not already done). Apart from benchmarking there is little point
342     in doing so, however.
343 root 1.94
344 root 1.117 =item $ncctx = Coro::State::cctx_count
345 root 1.64
346 root 1.161 Returns the number of C-level thread contexts allocated. If this number is
347     very high (more than a dozen) it might be beneficial to identify points of
348     C-level recursion (perl calls C/XS, which calls perl again which switches
349     coros - this forces an allocation of a C-level thread context) in your
350     code and moving this into a separate coro.
351 root 1.64
352 root 1.117 =item $nidle = Coro::State::cctx_idle
353 root 1.64
354 root 1.161 Returns the number of allocated but idle (currently unused and free for
355     reuse) C level thread contexts.
356    
357     =item $old = Coro::State::cctx_max_idle [$new_count]
358    
359     Coro caches C contexts that are not in use currently, as creating them
360     from scratch has some overhead.
361    
362     This function returns the current maximum number of idle C contexts and
363     optionally sets the new amount. The count must be at least C<1>, with the
364     default being C<4>.
365 root 1.64
366 root 1.117 =item $old = Coro::State::cctx_stacksize [$new_stacksize]
367 root 1.72
368     Returns the current C stack size and optionally sets the new I<minimum>
369     stack size to C<$new_stacksize> I<long>s. Existing stacks will not
370     be changed, but Coro will try to replace smaller stacks as soon as
371 root 1.91 possible. Any Coro::State that starts to use a stack after this call is
372 root 1.94 guaranteed this minimum stack size.
373    
374 root 1.140 Please note that coros will only need to use a C-level stack if the
375 root 1.94 interpreter recurses or calls a function in a module that calls back into
376     the interpreter, so use of this feature is usually never needed.
377 root 1.72
378 root 1.76 =item @states = Coro::State::list
379    
380     Returns a list of all states currently allocated.
381    
382 root 1.144 =item $was_enabled = Coro::State::enable_times [$enable]
383    
384     Enables/disables/queries the current state of per-thread real and
385     cpu-time gathering.
386    
387     When enabled, the real time and the cpu time (user + system time)
388     spent in each thread is accumulated. If disabled, then the accumulated
389     times will stay as they are (they start at 0).
390    
391     Currently, cpu time is only measured on GNU/Linux systems, all other
392     systems only gather real time.
393    
394     Enabling time profiling slows down thread switching by a factor of 2 to
395     10, depending on platform on hardware.
396    
397     The times will be displayed when running C<Coro::Debug::command "ps">, and
398     cna be queried by calling C<< $state->times >>.
399    
400     =item ($real, $cpu) = $state->times
401    
402     Returns the real time and cpu times spent in the given C<$state>. See
403     C<Coro::State::enable_times> for more info.
404    
405 root 1.127 =item $clone = $state->clone
406    
407 root 1.136 This exciting method takes a Coro::State object and clones it, i.e., it
408     creates a copy. This makes it possible to restore a state more than once,
409     and even return to states that have returned or have been terminated.
410 root 1.127
411 root 1.136 Since its only known purpose is for intellectual self-gratification, and
412 root 1.127 because it is a difficult piece of code, it is not enabled by default, and
413     not supported.
414    
415 root 1.140 Here are a few little-known facts: First, coros *are* full/true/real
416 root 1.136 continuations. Secondly Coro::State objects (without clone) *are* first
417     class continuations. Thirdly, nobody has ever found a use for the full
418     power of call/cc that isn't better (faster, easier, more efficiently)
419     implemented differently, and nobody has yet found a useful control
420     construct that can't be implemented without it already, just much faster
421 root 1.138 and with fewer resources. And lastly, Scheme's call/cc doesn't support
422     using call/cc to implement threads.
423 root 1.136
424     Among the games you can play with this is implementing a scheme-like
425     call-with-current-continuation, as the following code does (well, with
426     small differences).
427    
428     # perl disassociates from local lexicals on frame exit,
429     # so use a global variable for return values.
430     my @ret;
431 root 1.127
432 root 1.136 sub callcc($@) {
433 root 1.129 my ($func, @arg) = @_;
434 root 1.127
435 root 1.136 my $continuation = new Coro::State;
436     $continuation->transfer (new Coro::State sub {
437 root 1.129 my $escape = sub {
438 root 1.136 @ret = @_;
439     Coro::State->new->transfer ($continuation->clone);
440 root 1.129 };
441     $escape->($func->($escape, @arg));
442 root 1.136 });
443 root 1.127
444 root 1.136 my @ret_ = @ret; @ret = ();
445     wantarray ? @ret_ : pop @ret_
446 root 1.127 }
447    
448 root 1.136 Which could be used to implement a loop like this:
449    
450     async {
451     my $n;
452     my $l = callcc sub { $_[0] };
453    
454     $n++;
455     print "iteration $n\n";
456    
457     $l->($l) unless $n == 10;
458     };
459    
460     If you find this confusing, then you already understand the coolness of
461     call/cc: It can turn anything into spaghetti code real fast.
462 root 1.127
463     Besides, call/cc is much less useful in a Perl-like dynamic language (with
464     references, and its scoping rules) then in, say, scheme.
465    
466 root 1.130 Now, the known limitations of C<clone>:
467 root 1.127
468 root 1.140 It probably only works on perl 5.10; it cannot clone a coro inside
469 root 1.129 the substition operator (but windows perl can't fork from there either)
470     and some other contexts, and C<abort ()> is the preferred mechanism to
471     signal errors. It cannot clone a state that has a c context attached
472 root 1.131 (implementing clone on the C level is too hard for me to even try),
473 root 1.140 which rules out calling call/cc from the main coro. It cannot
474 root 1.131 clone a context that hasn't even been started yet. It doesn't work with
475 root 1.130 C<-DDEBUGGING> (but what does). It probably also leaks, and sometimes
476     triggers a few assertions inside Coro. Most of these limitations *are*
477     fixable with some effort, but that's pointless just to make a point that
478     it could be done.
479 root 1.127
480 root 1.136 The current implementation could without doubt be optimised to be a
481     constant-time operation by doing lazy stack copying, if somebody were
482     insane enough to invest the time.
483    
484 root 1.1 =cut
485    
486 root 1.115 # used by Coro::Debug only atm.
487 root 1.75 sub debug_desc {
488     $_[0]{desc}
489     }
490    
491 root 1.122 # for very deep reasons, we must initialise $Coro::main here.
492    
493     {
494     package Coro;
495    
496 root 1.140 our $main; # main coro
497     our $current; # current coro
498 root 1.122
499 root 1.151 $main = Coro::new Coro::;
500 root 1.122
501     $main->{desc} = "[main::]";
502    
503     # maybe some other module used Coro::Specific before...
504     $main->{_specific} = $current->{_specific}
505     if $current;
506    
507     _set_current $main;
508     }
509    
510 root 1.155 # we also make sure we have Coro::AnyEvent when AnyEvent is used,
511     # without loading or initialising AnyEvent
512     if (defined $AnyEvent::MODEL) {
513     require Coro::AnyEvent;
514     } else {
515     push @AnyEvent::post_detect, sub { require Coro::AnyEvent };
516     }
517    
518 root 1.1 1;
519    
520     =back
521    
522     =head1 BUGS
523    
524 root 1.5 This module is not thread-safe. You must only ever use this module from
525 root 1.94 the same thread (this requirement might be removed in the future).
526 root 1.1
527     =head1 SEE ALSO
528    
529     L<Coro>.
530    
531     =head1 AUTHOR
532    
533 root 1.41 Marc Lehmann <schmorp@schmorp.de>
534 root 1.39 http://home.schmorp.de/
535 root 1.1
536     =cut
537