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

Comparing Coro/Coro.pm (file contents):
Revision 1.131 by root, Thu Sep 20 12:24:42 2007 UTC vs.
Revision 1.132 by root, Thu Sep 20 22:53:23 2007 UTC

161# cannot destroy itself. 161# cannot destroy itself.
162my @destroy; 162my @destroy;
163my $manager; 163my $manager;
164 164
165$manager = new Coro sub { 165$manager = new Coro sub {
166 $current->desc ("[coro manager]");
167
168 while () { 166 while () {
169 (shift @destroy)->_cancel 167 (shift @destroy)->_cancel
170 while @destroy; 168 while @destroy;
171 169
172 &schedule; 170 &schedule;
173 } 171 }
174}; 172};
175 173$manager->desc ("[coro manager]");
176$manager->prio (PRIO_MAX); 174$manager->prio (PRIO_MAX);
177 175
178# static methods. not really. 176# static methods. not really.
179 177
180=back 178=back
533 531
534# we create a special coro because we want to cede, 532# we create a special coro because we want to cede,
535# to reduce pressure on the coro pool (because most callbacks 533# to reduce pressure on the coro pool (because most callbacks
536# return immediately and can be reused) and because we cannot cede 534# return immediately and can be reused) and because we cannot cede
537# inside an event callback. 535# inside an event callback.
538our $unblock_scheduler = async { 536our $unblock_scheduler = new Coro sub {
539 $current->desc ("[unblock_sub scheduler]");
540 while () { 537 while () {
541 while (my $cb = pop @unblock_queue) { 538 while (my $cb = pop @unblock_queue) {
542 # this is an inlined copy of async_pool 539 # this is an inlined copy of async_pool
543 my $coro = (pop @pool or new Coro \&pool_handler); 540 my $coro = (pop @pool or new Coro \&pool_handler);
544 541
547 cede; # for short-lived callbacks, this reduces pressure on the coro pool 544 cede; # for short-lived callbacks, this reduces pressure on the coro pool
548 } 545 }
549 schedule; # sleep well 546 schedule; # sleep well
550 } 547 }
551}; 548};
549$unblock_scheduler->desc ("[unblock_sub scheduler]");
552 550
553sub unblock_sub(&) { 551sub unblock_sub(&) {
554 my $cb = shift; 552 my $cb = shift;
555 553
556 sub { 554 sub {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines