ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Coro/State.pm
Revision: 1.109
Committed: Wed Sep 24 21:20:05 2008 UTC (15 years, 8 months ago) by root
Branch: MAIN
CVS Tags: rel-4_748
Changes since 1.108: +2 -0 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3     Coro::State - create and manage simple coroutines
4    
5     =head1 SYNOPSIS
6    
7     use Coro::State;
8    
9     $new = new Coro::State sub {
10 root 1.3 print "in coroutine (called with @_), switching back\n";
11 root 1.43 $new->transfer ($main);
12 root 1.1 print "in coroutine 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     print "in main, switching to coroutine\n";
19 root 1.43 $main->transfer ($new);
20 root 1.1 print "back in main, switch to coroutine again\n";
21 root 1.43 $main->transfer ($new);
22 root 1.1 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 root 1.42 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 root 1.94 (non-clonable) continuations and more.
33 root 1.1
34     This module provides only low-level functionality. See L<Coro> and related
35 root 1.42 modules for a higher level process abstraction including scheduling.
36 root 1.1
37 root 1.86 =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 avaikable 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 root 1.94 be at least one additional C coroutine. You can use the debugger (see
53 root 1.86 L<Coro::Debug>) to find out which coroutines are tied to their cctx and
54     which aren't.
55    
56 root 1.9 =head2 MEMORY CONSUMPTION
57    
58     A newly created coroutine that has not been used only allocates a
59 root 1.84 relatively small (a hundred bytes) structure. Only on the first
60 root 1.94 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 root 1.1
70     =cut
71    
72     package Coro::State;
73    
74 root 1.47 use strict;
75     no warnings "uninitialized";
76    
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.108 our $VERSION = 4.748;
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     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 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.94 Note 1: You I<must> store a valid code reference in these variables,
135     C<undef> will I<not> do.
136 root 1.84
137 root 1.89 Note 2: The value of this variable will be shared among all coroutines, so
138 root 1.100 changing its value will change it in all coroutines that don't have their
139     own die handler.
140 root 1.84
141     =item $Coro::State::WARNHOOK
142    
143     Similar to above die hook, but augments C<$SIG{__WARN__}>.
144    
145     =back
146    
147     =head2 FUNCTIONS
148    
149     =over 4
150    
151 root 1.65 =item $coro = new Coro::State [$coderef[, @args...]]
152 root 1.1
153     Create a new coroutine and return it. The first C<transfer> call to this
154 root 1.94 coroutine will start execution at the given coderef.
155    
156     If the subroutine returns the program will be terminated as if execution
157     of the main program ended.
158    
159     If it throws an exception the program will terminate unless the exception
160     is caught, exactly like in the main program.
161 root 1.74
162     Calling C<exit> in a coroutine does the same as calling it in the main
163     program.
164 root 1.1
165     If the coderef is omitted this function will create a new "empty"
166     coroutine, i.e. a coroutine that cannot be transfered to but can be used
167 root 1.104 to save the current coroutine state in (note that this is dangerous, as no
168     reference is taken to ensure that the "current coroutine state" survives,
169     the caller is responsible to ensure that the cloned state does not go
170     away).
171 root 1.1
172 root 1.55 The returned object is an empty hash which can be used for any purpose
173     whatsoever, for example when subclassing Coro::State.
174    
175 root 1.79 Certain variables are "localised" to each coroutine, that is, certain
176     "global" variables are actually per coroutine. Not everything that would
177     sensibly be localised currently is, and not everything that is localised
178     makes sense for every application, and the future might bring changes.
179 root 1.1
180 root 1.84 The following global variables can have different values per coroutine,
181     and have the stated initial values:
182 root 1.5
183 root 1.83 Variable Initial Value
184     @_ whatever arguments were passed to the Coro
185     $_ undef
186     $@ undef
187     $/ "\n"
188 root 1.88 $SIG{__DIE__} aliased to $Coro::State::DIEHOOK(*)
189     $SIG{__WARN__} aliased to $Coro::State::WARNHOOK(*)
190 root 1.83 (default fh) *STDOUT
191 root 1.84 $1, $2... all regex results are initially undefined
192 root 1.2
193 root 1.88 (*) reading the value from %SIG is not supported, but local'ising is.
194    
195 root 1.70 If you feel that something important is missing then tell me. Also
196 root 1.2 remember that every function call that might call C<transfer> (such
197     as C<Coro::Channel::put>) might clobber any global and/or special
198     variables. Yes, this is by design ;) You can always create your own
199     process abstraction model that saves these variables.
200 root 1.1
201 root 1.9 The easiest way to do this is to create your own scheduling primitive like
202 root 1.94 in the code below, and use it in your coroutines:
203 root 1.1
204 root 1.84 sub my_cede {
205 root 1.80 local ($;, ...);
206 root 1.84 Coro::cede;
207 root 1.1 }
208    
209 root 1.79 =cut
210    
211     # this is called for each newly created C coroutine,
212     # and is being artificially injected into the opcode flow.
213     # its sole purpose is to call transfer() once so it knows
214     # the stop level stack frame for stack sharing.
215     sub _cctx_init {
216     _set_stacklevel $_[0];
217     }
218    
219 root 1.76 =item $state->call ($coderef)
220    
221 root 1.94 Try to call the given C<$coderef> in the context of the given state. This
222 root 1.76 works even when the state is currently within an XS function, and can
223     be very dangerous. You can use it to acquire stack traces etc. (see the
224     Coro::Debug module for more details). The coderef MUST NOT EVER transfer
225     to another state.
226    
227     =item $state->eval ($string)
228    
229 root 1.94 Like C<call>, but eval's the string. Dangerous.
230 root 1.76
231 root 1.90 =item $state->throw ($exception)
232    
233     Makes the coroutine throw the given exception as soon as it regains
234 root 1.94 control.
235 root 1.90
236     =item $state->swap_defsv
237    
238     =item $state->swap_defav
239    
240     Swap the current C<$_> (swap_defsv) or C<@_> (swap_defav) with the
241     equivalent in the saved state of C<$state>. This can be used to give the
242     coroutine a defined content for C<@_> and C<$_> before transfer'ing to it.
243    
244 root 1.77 =item $state->trace ($flags)
245    
246     Internal function to control tracing. I just mention this so you can stay
247 root 1.90 away from abusing it.
248 root 1.77
249 root 1.70 =item $prev->transfer ($next)
250    
251     Save the state of the current subroutine in C<$prev> and switch to the
252     coroutine saved in C<$next>.
253    
254     The "state" of a subroutine includes the scope, i.e. lexical variables and
255     the current execution state (subroutine, stack).
256    
257 root 1.94 =item $state->has_cctx
258    
259 root 1.105 Returns whether the state currently uses a cctx/C coroutine. An active
260 root 1.94 state always has a cctx, as well as the main program. Other states only
261     use a cctxts when needed.
262    
263     =item $bytes = $state->rss
264    
265     Returns the memory allocated by the coroutine (which includes
266     static structures, various perl stacks but NOT local variables,
267     arguments or any C stack).
268    
269 root 1.64 =item Coro::State::cctx_count
270    
271     Returns the number of C-level coroutines allocated. If this number is
272     very high (more than a dozen) it might help to identify points of C-level
273     recursion in your code and moving this into a separate coroutine.
274    
275     =item Coro::State::cctx_idle
276    
277     Returns the number of allocated but idle (free for reuse) C level
278 root 1.76 coroutines. Currently, Coro will limit the number of idle/unused cctxs to
279     8.
280 root 1.64
281 root 1.72 =item Coro::State::cctx_stacksize [$new_stacksize]
282    
283     Returns the current C stack size and optionally sets the new I<minimum>
284     stack size to C<$new_stacksize> I<long>s. Existing stacks will not
285     be changed, but Coro will try to replace smaller stacks as soon as
286 root 1.91 possible. Any Coro::State that starts to use a stack after this call is
287 root 1.94 guaranteed this minimum stack size.
288    
289     Please note that Coroutines will only need to use a C-level stack if the
290     interpreter recurses or calls a function in a module that calls back into
291     the interpreter, so use of this feature is usually never needed.
292 root 1.72
293 root 1.92 =item Coro::State::force_cctx
294    
295     Forces the allocation of a C context for the currently running coroutine
296     (if not already done). Apart from benchmarking there is little point
297     in doing so, however.
298    
299 root 1.76 =item @states = Coro::State::list
300    
301     Returns a list of all states currently allocated.
302    
303 root 1.1 =cut
304    
305 root 1.75 sub debug_desc {
306     $_[0]{desc}
307     }
308    
309 root 1.1 1;
310    
311     =back
312    
313     =head1 BUGS
314    
315 root 1.5 This module is not thread-safe. You must only ever use this module from
316 root 1.94 the same thread (this requirement might be removed in the future).
317 root 1.1
318     =head1 SEE ALSO
319    
320     L<Coro>.
321    
322     =head1 AUTHOR
323    
324 root 1.41 Marc Lehmann <schmorp@schmorp.de>
325 root 1.39 http://home.schmorp.de/
326 root 1.1
327     =cut
328