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.6 by root, Sat Jul 21 18:21:45 2001 UTC vs.
Revision 1.15 by root, Mon Dec 4 13:47:56 2006 UTC

6# call with two calls of transfer in a loop. 6# call with two calls of transfer in a loop.
7 7
8use Coro; 8use Coro;
9use Benchmark; 9use Benchmark;
10 10
11sub a($) { }
12
11$a = bless {}, main::; 13$a = bless {}, main::;
12
13
14sub a {
15}
16 14
17sub b { 15sub b {
18 my ($self) = shift; 16 my ($self) = shift;
19 my $num = shift; 17 $self->{b} = shift if @_;
20 return $num+1; 18 $self->{b};
21} 19}
22 20
23$b = async { 21$b = async {
24 # do a little unrolling... 22 # do a little unrolling...
25 while() { 23 while() {
26 yield; yield; yield; yield; yield; 24 cede; cede; cede; cede; cede;
27 } 25 }
28}; 26};
29 27
30yield; 28cede;
31 29
32$main = $Coro::main; 30$main = $Coro::main;
33 31
34*transfer = \&Coro::State::transfer; 32*transfer = \&Coro::State::transfer;
35 33
36sub doit { 34sub doit0 {
37 while() { 35 while() {
38 # some unrolling here as well.. 36 # some unrolling here as well..
39 transfer($c, $main); transfer($c, $main); 37 transfer($c0, $main); transfer($c0, $main);
40 transfer($c, $main); transfer($c, $main); 38 transfer($c0, $main); transfer($c0, $main);
41 transfer($c, $main); transfer($c, $main); 39 transfer($c0, $main); transfer($c0, $main);
40 transfer($c0, $main); transfer($c0, $main);
42 } 41 }
43} 42}
44 43
45$c = Coro::State::_newprocess [sub { 44sub doit1 {
46 doit(1,2,3,4,5,6,7,8,9); 45 while() {
47}]; 46 # some unrolling here as well..
47 transfer($c1, $main); transfer($c1, $main);
48 transfer($c1, $main); transfer($c1, $main);
49 transfer($c1, $main); transfer($c1, $main);
50 transfer($c1, $main); transfer($c1, $main);
51 }
52}
48 53
49transfer($main, $c); 54$c0 = new Coro::State sub {
50 55 doit0(1,2,3,4,5,6,7,8,9);
51timethese 100000, {
52 empty => '&a; &a',
53 method => '$a->b(5); $a->b(6)',
54 yield => 'yield',
55 transfer => 'transfer($main, $c)',
56}; 56};
57 57
58$c1 = new Coro::State sub {
59 doit1(1,2,3,4,5,6,7,8,9);
60};
61
62$c0->save (0);
63$c1->save (-1);
64
65transfer($main, $c0);
66transfer($main, $c1);
67
68timethese 1000000, {
69 function => 'a(5); a(6)',
70 method => '$a->b(5); $a->b(6)',
71 cede => 'cede',
72 transfer0 => 'transfer($main, $c0)',
73 transfer1 => 'transfer($main, $c1)',
74};
75
76
77

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines