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

Comparing Coro/eg/bench (file contents):
Revision 1.7 by root, Sat Jul 21 19:53:29 2001 UTC vs.
Revision 1.8 by root, Mon Jul 23 02:14:19 2001 UTC

5# how fast it is, this little proggie compares a normal subroutine 5# how fast it is, this little proggie compares a normal subroutine
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
11sub a() { }
10 12
11$a = bless {}, main::; 13$a = bless {}, main::;
12 14
13sub b { 15sub b {
14 my ($self) = shift; 16 my ($self) = shift;
17} 19}
18 20
19$b = async { 21$b = async {
20 # do a little unrolling... 22 # do a little unrolling...
21 while() { 23 while() {
22 yield; yield; yield; yield; yield; 24 cede; cede; cede; cede; cede;
23 } 25 }
24}; 26};
25 27
26yield; 28cede;
27 29
28$main = $Coro::main; 30$main = $Coro::main;
29 31
30*transfer = \&Coro::State::transfer; 32*transfer = \&Coro::State::transfer;
31 33
32sub doit { 34sub doit0 {
33 while() { 35 while() {
34 # some unrolling here as well.. 36 # some unrolling here as well..
35 transfer($c, $main); transfer($c, $main); 37 transfer($c0, $main); transfer($c0, $main);
36 transfer($c, $main); transfer($c, $main); 38 transfer($c0, $main); transfer($c0, $main);
37 transfer($c, $main); transfer($c, $main); 39 transfer($c0, $main); transfer($c0, $main);
38 } 40 }
39} 41}
40 42
43sub doit1 {
44 while() {
45 # some unrolling here as well..
46 transfer($c1, $main); transfer($c1, $main);
47 transfer($c1, $main); transfer($c1, $main);
48 transfer($c1, $main); transfer($c1, $main);
49 }
50}
51
41$c = Coro::State::_newprocess [sub { 52$c0 = Coro::State::_newprocess [sub {
42 doit(1,2,3,4,5,6,7,8,9); 53 doit0(1,2,3,4,5,6,7,8,9);
43}]; 54}];
44 55
56$c1 = Coro::State::_newprocess [sub {
57 doit1(1,2,3,4,5,6,7,8,9);
58}];
59
45transfer($main, $c); 60transfer($main, $c0);
61transfer($main, $c1);
46 62
47timethese 100000, { 63timethese 100000, {
48 empty => '&a; &a', 64 empty => '&a; &a',
49 method => '$a->b(5); $a->b(6)', 65 method => '$a->b(5); $a->b(6)',
50 yield => 'yield', 66 cede => 'cede',
67 transfer0=> 'transfer($main, $c0, 0)',
51 transfer => 'transfer($main, $c)', 68 transfer1=> 'transfer($main, $c1)',
52}; 69};
53 70

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines