ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Coro/State.pm
Revision: 1.103
Committed: Wed Jul 23 22:15:25 2008 UTC (15 years, 10 months ago) by root
Branch: MAIN
CVS Tags: rel-4_745
Changes since 1.102: +1 -1 lines
Log Message:
4.745

File Contents

# Content
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 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 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 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 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
90 use XSLoader;
91
92 BEGIN {
93 our $VERSION = 4.745;
94
95 # 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 {
100 # save/restore the handlers before/after overwriting %SIG magic
101 local $SIG{__DIE__};
102 local $SIG{__WARN__};
103
104 XSLoader::load __PACKAGE__, $VERSION;
105 }
106
107 # need to do it after overwriting the %SIG magic
108 $SIG{__DIE__} ||= \&diehook;
109 $SIG{__WARN__} ||= \&warnhook;
110 }
111
112 use Exporter;
113 use base Exporter::;
114
115 =head2 GLOBAL VARIABLES
116
117 =over 4
118
119 =item $Coro::State::DIEHOOK
120
121 This works similarly to C<$SIG{__DIE__}> and is used as the default die
122 hook for newly created coroutines. This is useful if you want some generic
123 logging function that works for all coroutines that don't set their own
124 hook.
125
126 When Coro::State is first loaded it will install these handlers for the
127 main program, too, unless they have been overwritten already.
128
129 The default handlers provided will behave like the built-in ones (as if
130 they weren't there).
131
132 Note 1: You I<must> store a valid code reference in these variables,
133 C<undef> will I<not> do.
134
135 Note 2: The value of this variable will be shared among all coroutines, so
136 changing its value will change it in all coroutines that don't have their
137 own die handler.
138
139 =item $Coro::State::WARNHOOK
140
141 Similar to above die hook, but augments C<$SIG{__WARN__}>.
142
143 =back
144
145 =head2 FUNCTIONS
146
147 =over 4
148
149 =item $coro = new Coro::State [$coderef[, @args...]]
150
151 Create a new coroutine and return it. The first C<transfer> call to this
152 coroutine will start execution at the given coderef.
153
154 If the subroutine returns the program will be terminated as if execution
155 of the main program ended.
156
157 If it throws an exception the program will terminate unless the exception
158 is caught, exactly like in the main program.
159
160 Calling C<exit> in a coroutine does the same as calling it in the main
161 program.
162
163 If the coderef is omitted this function will create a new "empty"
164 coroutine, i.e. a coroutine that cannot be transfered to but can be used
165 to save the current coroutine in.
166
167 The returned object is an empty hash which can be used for any purpose
168 whatsoever, for example when subclassing Coro::State.
169
170 Certain variables are "localised" to each coroutine, that is, certain
171 "global" variables are actually per coroutine. Not everything that would
172 sensibly be localised currently is, and not everything that is localised
173 makes sense for every application, and the future might bring changes.
174
175 The following global variables can have different values per coroutine,
176 and have the stated initial values:
177
178 Variable Initial Value
179 @_ whatever arguments were passed to the Coro
180 $_ undef
181 $@ undef
182 $/ "\n"
183 $SIG{__DIE__} aliased to $Coro::State::DIEHOOK(*)
184 $SIG{__WARN__} aliased to $Coro::State::WARNHOOK(*)
185 (default fh) *STDOUT
186 $1, $2... all regex results are initially undefined
187
188 (*) reading the value from %SIG is not supported, but local'ising is.
189
190 If you feel that something important is missing then tell me. Also
191 remember that every function call that might call C<transfer> (such
192 as C<Coro::Channel::put>) might clobber any global and/or special
193 variables. Yes, this is by design ;) You can always create your own
194 process abstraction model that saves these variables.
195
196 The easiest way to do this is to create your own scheduling primitive like
197 in the code below, and use it in your coroutines:
198
199 sub my_cede {
200 local ($;, ...);
201 Coro::cede;
202 }
203
204 =cut
205
206 # this is called for each newly created C coroutine,
207 # and is being artificially injected into the opcode flow.
208 # its sole purpose is to call transfer() once so it knows
209 # the stop level stack frame for stack sharing.
210 sub _cctx_init {
211 _set_stacklevel $_[0];
212 }
213
214 =item $state->call ($coderef)
215
216 Try to call the given C<$coderef> in the context of the given state. This
217 works even when the state is currently within an XS function, and can
218 be very dangerous. You can use it to acquire stack traces etc. (see the
219 Coro::Debug module for more details). The coderef MUST NOT EVER transfer
220 to another state.
221
222 =item $state->eval ($string)
223
224 Like C<call>, but eval's the string. Dangerous.
225
226 =item $state->throw ($exception)
227
228 Makes the coroutine throw the given exception as soon as it regains
229 control.
230
231 =item $state->swap_defsv
232
233 =item $state->swap_defav
234
235 Swap the current C<$_> (swap_defsv) or C<@_> (swap_defav) with the
236 equivalent in the saved state of C<$state>. This can be used to give the
237 coroutine a defined content for C<@_> and C<$_> before transfer'ing to it.
238
239 =item $state->trace ($flags)
240
241 Internal function to control tracing. I just mention this so you can stay
242 away from abusing it.
243
244 =item $prev->transfer ($next)
245
246 Save the state of the current subroutine in C<$prev> and switch to the
247 coroutine saved in C<$next>.
248
249 The "state" of a subroutine includes the scope, i.e. lexical variables and
250 the current execution state (subroutine, stack).
251
252 =item $state->has_cctx
253
254 Returns wether the state currently uses a cctx/C coroutine. An active
255 state always has a cctx, as well as the main program. Other states only
256 use a cctxts when needed.
257
258 =item $bytes = $state->rss
259
260 Returns the memory allocated by the coroutine (which includes
261 static structures, various perl stacks but NOT local variables,
262 arguments or any C stack).
263
264 =item Coro::State::cctx_count
265
266 Returns the number of C-level coroutines allocated. If this number is
267 very high (more than a dozen) it might help to identify points of C-level
268 recursion in your code and moving this into a separate coroutine.
269
270 =item Coro::State::cctx_idle
271
272 Returns the number of allocated but idle (free for reuse) C level
273 coroutines. Currently, Coro will limit the number of idle/unused cctxs to
274 8.
275
276 =item Coro::State::cctx_stacksize [$new_stacksize]
277
278 Returns the current C stack size and optionally sets the new I<minimum>
279 stack size to C<$new_stacksize> I<long>s. Existing stacks will not
280 be changed, but Coro will try to replace smaller stacks as soon as
281 possible. Any Coro::State that starts to use a stack after this call is
282 guaranteed this minimum stack size.
283
284 Please note that Coroutines will only need to use a C-level stack if the
285 interpreter recurses or calls a function in a module that calls back into
286 the interpreter, so use of this feature is usually never needed.
287
288 =item Coro::State::force_cctx
289
290 Forces the allocation of a C context for the currently running coroutine
291 (if not already done). Apart from benchmarking there is little point
292 in doing so, however.
293
294 =item @states = Coro::State::list
295
296 Returns a list of all states currently allocated.
297
298 =cut
299
300 sub debug_desc {
301 $_[0]{desc}
302 }
303
304 1;
305
306 =back
307
308 =head1 BUGS
309
310 This module is not thread-safe. You must only ever use this module from
311 the same thread (this requirement might be removed in the future).
312
313 =head1 SEE ALSO
314
315 L<Coro>.
316
317 =head1 AUTHOR
318
319 Marc Lehmann <schmorp@schmorp.de>
320 http://home.schmorp.de/
321
322 =cut
323