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

Comparing cvsroot/Coro/Coro.pm (file contents):
Revision 1.129 by root, Wed Sep 19 22:33:08 2007 UTC vs.
Revision 1.131 by root, Thu Sep 20 12:24:42 2007 UTC

113reasons. If performance is not essential you are encouraged to use the 113reasons. If performance is not essential you are encouraged to use the
114C<Coro::current> function instead. 114C<Coro::current> function instead.
115 115
116=cut 116=cut
117 117
118$main->{desc} = "[main::]";
119
118# maybe some other module used Coro::Specific before... 120# maybe some other module used Coro::Specific before...
119$main->{specific} = $current->{specific} 121$main->{specific} = $current->{specific}
120 if $current; 122 if $current;
121 123
122_set_current $main; 124_set_current $main;
230terminate }> once per second or so to slowly replenish the pool. 232terminate }> once per second or so to slowly replenish the pool.
231 233
232=cut 234=cut
233 235
234our $POOL_SIZE = 8; 236our $POOL_SIZE = 8;
237our $MAX_POOL_RSS = 64 * 1024;
235our @pool; 238our @pool;
236 239
237sub pool_handler { 240sub pool_handler {
238 while () { 241 while () {
239 $current->{desc} = "[async_pool]"; 242 $current->{desc} = "[async_pool]";
242 my ($cb, @arg) = @{ delete $current->{_invoke} or return }; 245 my ($cb, @arg) = @{ delete $current->{_invoke} or return };
243 $cb->(@arg); 246 $cb->(@arg);
244 }; 247 };
245 warn $@ if $@; 248 warn $@ if $@;
246 249
247 last if @pool >= $POOL_SIZE; 250 last if @pool >= $POOL_SIZE || $current->rss >= $MAX_POOL_RSS;
248 251
249 push @pool, $current; 252 push @pool, $current;
250 $current->{desc} = "[async_pool idle]"; 253 $current->{desc} = "[async_pool idle]";
251 $current->save (Coro::State::SAVE_DEF); 254 $current->save (Coro::State::SAVE_DEF);
252 $current->prio (0); 255 $current->prio (0);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines