ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Coro/State.pm
Revision: 1.180
Committed: Fri Dec 7 22:37:24 2012 UTC (11 years, 6 months ago) by root
Branch: MAIN
CVS Tags: rel-6_23
Changes since 1.179: +1 -1 lines
Log Message:
6.23

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     our $DIEHOOK;
80     our $WARNHOOK;
81    
82     BEGIN {
83     $DIEHOOK = sub { };
84     $WARNHOOK = sub { warn $_[0] };
85     }
86    
87     sub diehook { &$DIEHOOK }
88     sub warnhook { &$WARNHOOK }
89 root 1.84
90 root 1.47 use XSLoader;
91 root 1.18
92 root 1.1 BEGIN {
93 root 1.180 our $VERSION = 6.23;
94 root 1.1
95 root 1.67 # must be done here because the xs part expects it to exist
96     # it might exist already because Coro::Specific created it.
97     $Coro::current ||= { };
98    
99 root 1.167 XSLoader::load __PACKAGE__, $VERSION;
100 root 1.101
101     # need to do it after overwriting the %SIG magic
102     $SIG{__DIE__} ||= \&diehook;
103     $SIG{__WARN__} ||= \&warnhook;
104 root 1.1 }
105    
106 root 1.51 use Exporter;
107 root 1.47 use base Exporter::;
108 root 1.5
109 root 1.84 =head2 GLOBAL VARIABLES
110    
111     =over 4
112    
113     =item $Coro::State::DIEHOOK
114    
115     This works similarly to C<$SIG{__DIE__}> and is used as the default die
116 root 1.140 hook for newly created Coro::States. This is useful if you want some generic
117     logging function that works for all threads that don't set their own
118 root 1.84 hook.
119    
120     When Coro::State is first loaded it will install these handlers for the
121 root 1.101 main program, too, unless they have been overwritten already.
122 root 1.84
123 root 1.100 The default handlers provided will behave like the built-in ones (as if
124 root 1.84 they weren't there).
125    
126 root 1.150 If you don't want to exit your program on uncaught exceptions, you must
127     not return from your die hook - call C<Coro::terminate> instead.
128 root 1.125
129 root 1.94 Note 1: You I<must> store a valid code reference in these variables,
130     C<undef> will I<not> do.
131 root 1.84
132 root 1.140 Note 2: The value of this variable will be shared among all threads, so
133     changing its value will change it in all threads that don't have their
134 root 1.100 own die handler.
135 root 1.84
136     =item $Coro::State::WARNHOOK
137    
138     Similar to above die hook, but augments C<$SIG{__WARN__}>.
139    
140     =back
141    
142     =head2 FUNCTIONS
143    
144     =over 4
145    
146 root 1.65 =item $coro = new Coro::State [$coderef[, @args...]]
147 root 1.1
148 root 1.140 Create a new Coro::State thread object and return it. The first
149     C<transfer> call to this thread will start execution at the given
150     coderef, with the given arguments.
151 root 1.125
152     Note that the arguments will not be copied. Instead, as with normal
153 root 1.140 function calls, the thread receives passed arguments by reference, so
154 root 1.125 make sure you don't change them in unexpected ways.
155    
156 root 1.140 Returning from such a thread is I<NOT> supported. Neither is calling
157 root 1.125 C<exit> or throwing an uncaught exception. The following paragraphs
158     describe what happens in current versions of Coro.
159 root 1.94
160     If the subroutine returns the program will be terminated as if execution
161     of the main program ended.
162    
163     If it throws an exception the program will terminate unless the exception
164     is caught, exactly like in the main program.
165 root 1.74
166 root 1.140 Calling C<exit> in a thread does the same as calling it in the main
167 root 1.133 program, but due to libc bugs on many BSDs, this doesn't work reliable
168     everywhere.
169 root 1.1
170     If the coderef is omitted this function will create a new "empty"
171 root 1.140 thread, i.e. a thread that cannot be transfered to but can be used
172     to save the current thread state in (note that this is dangerous, as no
173     reference is taken to ensure that the "current thread state" survives,
174 root 1.104 the caller is responsible to ensure that the cloned state does not go
175     away).
176 root 1.1
177 root 1.55 The returned object is an empty hash which can be used for any purpose
178     whatsoever, for example when subclassing Coro::State.
179    
180 root 1.140 Certain variables are "localised" to each thread, that is, certain
181     "global" variables are actually per thread. Not everything that would
182 root 1.79 sensibly be localised currently is, and not everything that is localised
183     makes sense for every application, and the future might bring changes.
184 root 1.1
185 root 1.140 The following global variables can have different values per thread,
186 root 1.84 and have the stated initial values:
187 root 1.5
188 root 1.83 Variable Initial Value
189     @_ whatever arguments were passed to the Coro
190     $_ undef
191     $@ undef
192     $/ "\n"
193 root 1.88 $SIG{__DIE__} aliased to $Coro::State::DIEHOOK(*)
194     $SIG{__WARN__} aliased to $Coro::State::WARNHOOK(*)
195 root 1.83 (default fh) *STDOUT
196 root 1.133 $^H, %^H zero/empty.
197 root 1.84 $1, $2... all regex results are initially undefined
198 root 1.2
199 root 1.88 (*) reading the value from %SIG is not supported, but local'ising is.
200    
201 root 1.70 If you feel that something important is missing then tell me. Also
202 root 1.2 remember that every function call that might call C<transfer> (such
203     as C<Coro::Channel::put>) might clobber any global and/or special
204     variables. Yes, this is by design ;) You can always create your own
205     process abstraction model that saves these variables.
206 root 1.1
207 root 1.9 The easiest way to do this is to create your own scheduling primitive like
208 root 1.140 in the code below, and use it in your threads:
209 root 1.1
210 root 1.84 sub my_cede {
211 root 1.80 local ($;, ...);
212 root 1.84 Coro::cede;
213 root 1.1 }
214    
215 root 1.140 Another way is to use dynamic winders, see C<Coro::on_enter> and
216     C<Coro::on_leave> for this.
217    
218 root 1.176 Yet another way that works only for variables is C<< ->swap_sv >>.
219 root 1.160
220 root 1.140 =item $prev->transfer ($next)
221    
222     Save the state of the current subroutine in C<$prev> and switch to the
223     thread saved in C<$next>.
224    
225     The "state" of a subroutine includes the scope, i.e. lexical variables and
226     the current execution state (subroutine, stack).
227    
228 root 1.166 =item $state->throw ([$scalar])
229    
230 root 1.140 =item $state->is_new
231    
232 root 1.166 =item $state->is_zombie
233    
234     See the corresponding method for L<Coro> objects.
235 root 1.140
236     =item $state->cancel
237    
238     Forcefully destructs the given Coro::State. While you can keep the
239     reference, and some memory is still allocated, the Coro::State object is
240 root 1.166 effectively dead, destructors have been freed, it cannot be transfered to
241     anymore, it's pushing up the daisies.
242 root 1.119
243 root 1.76 =item $state->call ($coderef)
244    
245 root 1.94 Try to call the given C<$coderef> in the context of the given state. This
246 root 1.76 works even when the state is currently within an XS function, and can
247     be very dangerous. You can use it to acquire stack traces etc. (see the
248     Coro::Debug module for more details). The coderef MUST NOT EVER transfer
249     to another state.
250    
251     =item $state->eval ($string)
252    
253 root 1.94 Like C<call>, but eval's the string. Dangerous.
254 root 1.76
255 root 1.90 =item $state->swap_defsv
256    
257     =item $state->swap_defav
258    
259     Swap the current C<$_> (swap_defsv) or C<@_> (swap_defav) with the
260     equivalent in the saved state of C<$state>. This can be used to give the
261 root 1.140 coro a defined content for C<@_> and C<$_> before transfer'ing to it.
262 root 1.90
263 root 1.154 =item $state->swap_sv (\$sv, \$swap_sv)
264    
265     This (very advanced) function can be used to make I<any> variable local to
266     a thread.
267    
268     It works by swapping the contents of C<$sv> and C<$swap_sv> each time the
269 root 1.160 thread is entered and left again, i.e. it is similar to:
270 root 1.154
271     $tmp = $sv; $sv = $swap_sv; $swap_sv = $tmp;
272    
273     Except that it doesn't make an copies and works on hashes and even more
274     exotic values (code references!).
275    
276 root 1.176 When called on the current thread (i.e. from within the thread that will
277     receive the swap_sv), then this method acts as if it was called from
278     another thread, i.e. after adding the two SV's to the threads swap list
279     their values will be swapped.
280    
281 root 1.154 Needless to say, this function can be very very dangerous: you can easily
282     swap a hash with a reference (i.e. C<%hash> I<becomes> a reference), and perl
283     will not like this at all.
284    
285     It will also swap "magicalness" - so when swapping a builtin perl variable
286     (such as C<$.>), it will lose it's magicalness, which, again, perl will
287     not like, so don't do it.
288    
289     Lastly, the C<$swap_sv> itself will be used, not a copy, so make sure you
290     give each thread it's own C<$swap_sv> instance.
291    
292     It is, however, quite safe to swap some normal variable with
293     another. For example, L<PApp::SQL> stores the default database handle in
294     C<$PApp::SQL::DBH>. To make this a per-thread variable, use this:
295    
296     my $private_dbh = ...;
297     $coro->swap_sv (\$PApp::SQL::DBH, \$private_dbh);
298    
299     This results in C<$PApp::SQL::DBH> having the value of C<$private_dbh>
300     while it executes, and whatever other value it had when it doesn't
301     execute.
302    
303     You can also swap hashes and other values:
304    
305     my %private_hash;
306     $coro->swap_sv (\%some_hash, \%private_hash);
307    
308 root 1.77 =item $state->trace ($flags)
309    
310     Internal function to control tracing. I just mention this so you can stay
311 root 1.90 away from abusing it.
312 root 1.77
313 root 1.117 =item $bytes = $state->rss
314    
315 root 1.140 Returns the memory allocated by the coro (which includes static
316 root 1.117 structures, various perl stacks but NOT local variables, arguments or any
317     C context data). This is a rough indication of how much memory it might
318     use.
319    
320 root 1.94 =item $state->has_cctx
321    
322 root 1.117 Returns whether the state currently uses a cctx/C context. An active
323 root 1.94 state always has a cctx, as well as the main program. Other states only
324     use a cctxts when needed.
325    
326 root 1.117 =item Coro::State::force_cctx
327 root 1.94
328 root 1.140 Forces the allocation of a C context for the currently running coro
329 root 1.117 (if not already done). Apart from benchmarking there is little point
330     in doing so, however.
331 root 1.94
332 root 1.117 =item $ncctx = Coro::State::cctx_count
333 root 1.64
334 root 1.161 Returns the number of C-level thread contexts allocated. If this number is
335     very high (more than a dozen) it might be beneficial to identify points of
336     C-level recursion (perl calls C/XS, which calls perl again which switches
337     coros - this forces an allocation of a C-level thread context) in your
338     code and moving this into a separate coro.
339 root 1.64
340 root 1.117 =item $nidle = Coro::State::cctx_idle
341 root 1.64
342 root 1.161 Returns the number of allocated but idle (currently unused and free for
343     reuse) C level thread contexts.
344    
345     =item $old = Coro::State::cctx_max_idle [$new_count]
346    
347     Coro caches C contexts that are not in use currently, as creating them
348     from scratch has some overhead.
349    
350     This function returns the current maximum number of idle C contexts and
351     optionally sets the new amount. The count must be at least C<1>, with the
352     default being C<4>.
353 root 1.64
354 root 1.117 =item $old = Coro::State::cctx_stacksize [$new_stacksize]
355 root 1.72
356     Returns the current C stack size and optionally sets the new I<minimum>
357     stack size to C<$new_stacksize> I<long>s. Existing stacks will not
358     be changed, but Coro will try to replace smaller stacks as soon as
359 root 1.91 possible. Any Coro::State that starts to use a stack after this call is
360 root 1.94 guaranteed this minimum stack size.
361    
362 root 1.140 Please note that coros will only need to use a C-level stack if the
363 root 1.94 interpreter recurses or calls a function in a module that calls back into
364     the interpreter, so use of this feature is usually never needed.
365 root 1.72
366 root 1.76 =item @states = Coro::State::list
367    
368     Returns a list of all states currently allocated.
369    
370 root 1.144 =item $was_enabled = Coro::State::enable_times [$enable]
371    
372     Enables/disables/queries the current state of per-thread real and
373     cpu-time gathering.
374    
375     When enabled, the real time and the cpu time (user + system time)
376     spent in each thread is accumulated. If disabled, then the accumulated
377     times will stay as they are (they start at 0).
378    
379     Currently, cpu time is only measured on GNU/Linux systems, all other
380     systems only gather real time.
381    
382     Enabling time profiling slows down thread switching by a factor of 2 to
383     10, depending on platform on hardware.
384    
385     The times will be displayed when running C<Coro::Debug::command "ps">, and
386     cna be queried by calling C<< $state->times >>.
387    
388     =item ($real, $cpu) = $state->times
389    
390     Returns the real time and cpu times spent in the given C<$state>. See
391     C<Coro::State::enable_times> for more info.
392    
393 root 1.127 =item $clone = $state->clone
394    
395 root 1.136 This exciting method takes a Coro::State object and clones it, i.e., it
396     creates a copy. This makes it possible to restore a state more than once,
397     and even return to states that have returned or have been terminated.
398 root 1.127
399 root 1.136 Since its only known purpose is for intellectual self-gratification, and
400 root 1.127 because it is a difficult piece of code, it is not enabled by default, and
401     not supported.
402    
403 root 1.140 Here are a few little-known facts: First, coros *are* full/true/real
404 root 1.136 continuations. Secondly Coro::State objects (without clone) *are* first
405     class continuations. Thirdly, nobody has ever found a use for the full
406     power of call/cc that isn't better (faster, easier, more efficiently)
407     implemented differently, and nobody has yet found a useful control
408     construct that can't be implemented without it already, just much faster
409 root 1.138 and with fewer resources. And lastly, Scheme's call/cc doesn't support
410     using call/cc to implement threads.
411 root 1.136
412     Among the games you can play with this is implementing a scheme-like
413     call-with-current-continuation, as the following code does (well, with
414     small differences).
415    
416     # perl disassociates from local lexicals on frame exit,
417     # so use a global variable for return values.
418     my @ret;
419 root 1.127
420 root 1.136 sub callcc($@) {
421 root 1.129 my ($func, @arg) = @_;
422 root 1.127
423 root 1.136 my $continuation = new Coro::State;
424     $continuation->transfer (new Coro::State sub {
425 root 1.129 my $escape = sub {
426 root 1.136 @ret = @_;
427     Coro::State->new->transfer ($continuation->clone);
428 root 1.129 };
429     $escape->($func->($escape, @arg));
430 root 1.136 });
431 root 1.127
432 root 1.136 my @ret_ = @ret; @ret = ();
433     wantarray ? @ret_ : pop @ret_
434 root 1.127 }
435    
436 root 1.136 Which could be used to implement a loop like this:
437    
438     async {
439     my $n;
440     my $l = callcc sub { $_[0] };
441    
442     $n++;
443     print "iteration $n\n";
444    
445     $l->($l) unless $n == 10;
446     };
447    
448     If you find this confusing, then you already understand the coolness of
449     call/cc: It can turn anything into spaghetti code real fast.
450 root 1.127
451     Besides, call/cc is much less useful in a Perl-like dynamic language (with
452     references, and its scoping rules) then in, say, scheme.
453    
454 root 1.130 Now, the known limitations of C<clone>:
455 root 1.127
456 root 1.140 It probably only works on perl 5.10; it cannot clone a coro inside
457 root 1.129 the substition operator (but windows perl can't fork from there either)
458     and some other contexts, and C<abort ()> is the preferred mechanism to
459     signal errors. It cannot clone a state that has a c context attached
460 root 1.131 (implementing clone on the C level is too hard for me to even try),
461 root 1.140 which rules out calling call/cc from the main coro. It cannot
462 root 1.131 clone a context that hasn't even been started yet. It doesn't work with
463 root 1.130 C<-DDEBUGGING> (but what does). It probably also leaks, and sometimes
464     triggers a few assertions inside Coro. Most of these limitations *are*
465     fixable with some effort, but that's pointless just to make a point that
466     it could be done.
467 root 1.127
468 root 1.136 The current implementation could without doubt be optimised to be a
469     constant-time operation by doing lazy stack copying, if somebody were
470     insane enough to invest the time.
471    
472 root 1.1 =cut
473    
474 root 1.115 # used by Coro::Debug only atm.
475 root 1.75 sub debug_desc {
476     $_[0]{desc}
477     }
478    
479 root 1.122 # for very deep reasons, we must initialise $Coro::main here.
480    
481     {
482     package Coro;
483    
484 root 1.140 our $main; # main coro
485     our $current; # current coro
486 root 1.122
487 root 1.151 $main = Coro::new Coro::;
488 root 1.122
489     $main->{desc} = "[main::]";
490    
491     # maybe some other module used Coro::Specific before...
492     $main->{_specific} = $current->{_specific}
493     if $current;
494    
495     _set_current $main;
496     }
497    
498 root 1.155 # we also make sure we have Coro::AnyEvent when AnyEvent is used,
499     # without loading or initialising AnyEvent
500     if (defined $AnyEvent::MODEL) {
501     require Coro::AnyEvent;
502     } else {
503     push @AnyEvent::post_detect, sub { require Coro::AnyEvent };
504     }
505    
506 root 1.1 1;
507    
508     =back
509    
510     =head1 BUGS
511    
512 root 1.5 This module is not thread-safe. You must only ever use this module from
513 root 1.94 the same thread (this requirement might be removed in the future).
514 root 1.1
515     =head1 SEE ALSO
516    
517     L<Coro>.
518    
519     =head1 AUTHOR
520    
521 root 1.41 Marc Lehmann <schmorp@schmorp.de>
522 root 1.39 http://home.schmorp.de/
523 root 1.1
524     =cut
525