ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Coro.pm
(Generate patch)

Comparing Coro/Coro.pm (file contents):
Revision 1.202 by root, Tue Sep 30 17:12:34 2008 UTC vs.
Revision 1.206 by root, Thu Oct 30 09:57:00 2008 UTC

67 67
68our $idle; # idle handler 68our $idle; # idle handler
69our $main; # main coroutine 69our $main; # main coroutine
70our $current; # current coroutine 70our $current; # current coroutine
71 71
72our $VERSION = 4.8; 72our $VERSION = 4.802;
73 73
74our @EXPORT = qw(async async_pool cede schedule terminate current unblock_sub); 74our @EXPORT = qw(async async_pool cede schedule terminate current unblock_sub);
75our %EXPORT_TAGS = ( 75our %EXPORT_TAGS = (
76 prio => [qw(PRIO_MAX PRIO_HIGH PRIO_NORMAL PRIO_LOW PRIO_IDLE PRIO_MIN)], 76 prio => [qw(PRIO_MAX PRIO_HIGH PRIO_NORMAL PRIO_LOW PRIO_IDLE PRIO_MIN)],
77); 77);
221terminate or join on it (although you are allowed to), and you get a 221terminate or join on it (although you are allowed to), and you get a
222coroutine that might have executed other code already (which can be good 222coroutine that might have executed other code already (which can be good
223or bad :). 223or bad :).
224 224
225On the plus side, this function is faster than creating (and destroying) 225On the plus side, this function is faster than creating (and destroying)
226a completely new coroutine, so if you need a lot of generic coroutines in 226a completly new coroutine, so if you need a lot of generic coroutines in
227quick successsion, use C<async_pool>, not C<async>. 227quick successsion, use C<async_pool>, not C<async>.
228 228
229The code block is executed in an C<eval> context and a warning will be 229The code block is executed in an C<eval> context and a warning will be
230issued in case of an exception instead of terminating the program, as 230issued in case of an exception instead of terminating the program, as
231C<async> does. As the coroutine is being reused, stuff like C<on_destroy> 231C<async> does. As the coroutine is being reused, stuff like C<on_destroy>
235 235
236The priority will be reset to C<0> after each run, tracing will be 236The priority will be reset to C<0> after each run, tracing will be
237disabled, the description will be reset and the default output filehandle 237disabled, the description will be reset and the default output filehandle
238gets restored, so you can change all these. Otherwise the coroutine will 238gets restored, so you can change all these. Otherwise the coroutine will
239be re-used "as-is": most notably if you change other per-coroutine global 239be re-used "as-is": most notably if you change other per-coroutine global
240stuff such as C<$/> you I<must needs> to revert that change, which is most 240stuff such as C<$/> you I<must needs> revert that change, which is most
241simply done by using local as in: C< local $/ >. 241simply done by using local as in: C<< local $/ >>.
242 242
243The pool size is limited to C<8> idle coroutines (this can be adjusted by 243The idle pool size is limited to C<8> idle coroutines (this can be
244changing $Coro::POOL_SIZE), and there can be as many non-idle coros as 244adjusted by changing $Coro::POOL_SIZE), but there can be as many non-idle
245required. 245coros as required.
246 246
247If you are concerned about pooled coroutines growing a lot because a 247If you are concerned about pooled coroutines growing a lot because a
248single C<async_pool> used a lot of stackspace you can e.g. C<async_pool 248single C<async_pool> used a lot of stackspace you can e.g. C<async_pool
249{ terminate }> once per second or so to slowly replenish the pool. In 249{ terminate }> once per second or so to slowly replenish the pool. In
250addition to that, when the stacks used by a handler grows larger than 16kb 250addition to that, when the stacks used by a handler grows larger than 16kb

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines