ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Coro/State.pm
Revision: 1.191
Committed: Tue Mar 4 12:32:03 2014 UTC (10 years, 3 months ago) by root
Branch: MAIN
CVS Tags: rel-6_37
Changes since 1.190: +2 -2 lines
Log Message:
6.37

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