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

Comparing cvsroot/Coro/eg/bench (file contents):
Revision 1.1 by root, Tue Jul 3 05:05:45 2001 UTC vs.
Revision 1.6 by root, Sat Jul 21 18:21:45 2001 UTC

8use Coro; 8use Coro;
9use Benchmark; 9use Benchmark;
10 10
11$a = bless {}, main::; 11$a = bless {}, main::;
12 12
13# do something similar, switch two global vars and return something
14 13
15sub a { 14sub a {
16 $old = $current;
17 $current = $_[0];
18} 15}
19 16
20$b = new Coro sub { 17sub b {
18 my ($self) = shift;
19 my $num = shift;
20 return $num+1;
21}
22
23$b = async {
21 # do a little unrolling... 24 # do a little unrolling...
22 while() { 25 while() {
23 $Coro::main->resume; $Coro::main->resume; $Coro::main->resume; 26 yield; yield; yield; yield; yield;
24 } 27 }
25}; 28};
26 29
27$b->resume; # the first resume is slow because it allocates all the memory 30yield;
28 31
29$main = $Coro::main; 32$main = $Coro::main;
30 33
31sub transfer { 34*transfer = \&Coro::State::transfer;
32 Coro::_transfer($_[0], $_[1]); 35
36sub doit {
37 while() {
38 # some unrolling here as well..
39 transfer($c, $main); transfer($c, $main);
40 transfer($c, $main); transfer($c, $main);
41 transfer($c, $main); transfer($c, $main);
42 }
33} 43}
34 44
35$c = Coro::_newprocess { 45$c = Coro::State::_newprocess [sub {
36 while() { 46 doit(1,2,3,4,5,6,7,8,9);
37 transfer($c, $main); transfer($c, $main); transfer($c, $main);
38 }
39}; 47}];
40 48
41transfer($main, $c); 49transfer($main, $c);
42 50
43timethese 100000, { 51timethese 100000, {
44 method => '$a->a; $a->a; $a->a; $a->a', 52 empty => '&a; &a',
45 resume => '$b->resume; $b->resume', 53 method => '$a->b(5); $a->b(6)',
54 yield => 'yield',
46 transfer => 'transfer($main, $c); transfer($main, $c)', 55 transfer => 'transfer($main, $c)',
47}; 56};
57

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines