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

Comparing Coro/eg/bench (file contents):
Revision 1.2 by root, Tue Jul 10 01:43:21 2001 UTC vs.
Revision 1.9 by root, Sat Aug 11 19:59:19 2001 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 14
13# do something similar, switch two global vars and return something
14
15sub a { 15sub b {
16 $old = $current; 16 my ($self) = shift;
17 $current = $_[0]; 17 $self->{b} = shift if @_;
18 $self->{b};
18} 19}
19 20
20$b = new Coro sub { 21$b = async {
21 # do a little unrolling... 22 # do a little unrolling...
22 while() { 23 while() {
23 $Coro::main->resume; $Coro::main->resume; $Coro::main->resume; 24 cede; cede; cede; cede; cede;
24 } 25 }
25}; 26};
26 27
27$b->resume; # the first resume is slow because it allocates all the memory 28cede;
28 29
29$main = $Coro::main; 30$main = $Coro::main;
30 31
31#*transfer = \&Coro::_transfer; 32*transfer = \&Coro::State::transfer;
32sub transfer { Coro::_transfer($_[0], $_[1]) }
33 33
34$c = Coro::_newprocess { 34sub doit0 {
35 while() { 35 while() {
36 # some unrolling here as well..
36 transfer($c, $main); transfer($c, $main); transfer($c, $main); 37 transfer($c0, $main, 0); transfer($c0, $main, 0);
38 transfer($c0, $main, 0); transfer($c0, $main, 0);
39 transfer($c0, $main, 0); transfer($c0, $main, 0);
37 } 40 }
41}
42
43sub doit1 {
44 while() {
45 # some unrolling here as well..
46 transfer($c1, $main, -1); transfer($c1, $main, -1);
47 transfer($c1, $main, -1); transfer($c1, $main, -1);
48 transfer($c1, $main, -1); transfer($c1, $main, -1);
49 }
50}
51
52$c0 = Coro::State::_newprocess [sub {
53 doit0(1,2,3,4,5,6,7,8,9);
54}];
55
56$c1 = Coro::State::_newprocess [sub {
57 doit1(1,2,3,4,5,6,7,8,9);
58}];
59
60transfer($main, $c0, 0);
61transfer($main, $c1, -1);
62
63timethese 100000, {
64 empty => '&a; &a',
65 method => '$a->b(5); $a->b(6)',
66 cede => 'cede',
67 transfer0=> 'transfer($main, $c0, 0)',
68 transfer1=> 'transfer($main, $c1, -1)',
38}; 69};
39 70
40transfer($main, $c);
41
42timethese 100000, {
43 method => '$a->a; $a->a; $a->a; $a->a',
44 resume => '$b->resume; $b->resume',
45 transfer => 'transfer($main, $c); transfer($main, $c)',
46};

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines