--- cvsroot/Coro/eg/bench 2001/07/21 18:21:45 1.6 +++ cvsroot/Coro/eg/bench 2011/05/30 02:21:54 1.21 @@ -8,50 +8,75 @@ use Coro; use Benchmark; -$a = bless {}, main::; - +sub a($) { } -sub a { -} +$a = bless {}, main::; sub b { my ($self) = shift; - my $num = shift; - return $num+1; + $self->{b} = shift if @_; + $self->{b}; } $b = async { # do a little unrolling... while() { - yield; yield; yield; yield; yield; + cede; cede; cede; cede; cede; + cede; cede; cede; cede; cede; } }; -yield; +cede; $main = $Coro::main; *transfer = \&Coro::State::transfer; -sub doit { +sub doit0 { + while() { + # some unrolling here as well.. + transfer($c0, $main); transfer($c0, $main); + transfer($c0, $main); transfer($c0, $main); + transfer($c0, $main); transfer($c0, $main); + transfer($c0, $main); transfer($c0, $main); + } +} + +sub doit1 { while() { # some unrolling here as well.. - transfer($c, $main); transfer($c, $main); - transfer($c, $main); transfer($c, $main); - transfer($c, $main); transfer($c, $main); + transfer($c1, $main); transfer($c1, $main); + transfer($c1, $main); transfer($c1, $main); + transfer($c1, $main); transfer($c1, $main); + transfer($c1, $main); transfer($c1, $main); } } -$c = Coro::State::_newprocess [sub { - doit(1,2,3,4,5,6,7,8,9); -}]; - -transfer($main, $c); - -timethese 100000, { - empty => '&a; &a', - method => '$a->b(5); $a->b(6)', - yield => 'yield', - transfer => 'transfer($main, $c)', +$c0 = new Coro::State sub { + doit0(1,2,3,4,5,6,7,8,9); +}; + +$c1 = new Coro::State sub { + doit1(1,2,3,4,5,6,7,8,9); +}; + +#$c0->save (0); +#$c1->save (-1); + +transfer($main, $c0); +transfer($main, $c1); + +#Coro::State::enable_times 1; +#use Coro::Debug; Coro::Debug::command "ps";#d# +#(async { +timethese 5000000, { + function => 'a(5); a(6)', + method => '$a->b(5); $a->b(6)', + cede => 'cede', + transfer0 => 'transfer($main, $c0)', + transfer1 => 'transfer($main, $c1)', }; +#})->join; +#use Coro::Debug; Coro::Debug::command "ps";#d# +