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.22 by root, Sat Jun 11 13:49:00 2011 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;
25 cede; cede; cede; cede; cede;
24 } 26 }
25}; 27};
26 28
27$b->resume; # the first resume is slow because it allocates all the memory 29cede;
28 30
29$main = $Coro::main; 31*transfer = \&Coro::State::transfer;
30 32
31sub transfer { 33sub doit0 {
32 Coro::_transfer($_[0], $_[1]); 34 while() {
35 # some unrolling here as well..
36 transfer($c0, $main); transfer($c0, $main);
37 transfer($c0, $main); transfer($c0, $main);
38 transfer($c0, $main); transfer($c0, $main);
39 transfer($c0, $main); transfer($c0, $main);
40 }
33} 41}
34 42
35$c = Coro::_newprocess { 43sub doit1 {
36 while() { 44 while() {
45 # some unrolling here as well..
37 transfer($c, $main); transfer($c, $main); transfer($c, $main); 46 transfer($c1, $main); transfer($c1, $main);
47 transfer($c1, $main); transfer($c1, $main);
48 transfer($c1, $main); transfer($c1, $main);
49 transfer($c1, $main); transfer($c1, $main);
38 } 50 }
51}
52
53$c0 = new Coro::State sub {
54 doit0(1,2,3,4,5,6,7,8,9);
39}; 55};
40 56
41transfer($main, $c); 57$c1 = new Coro::State sub {
58 doit1(1,2,3,4,5,6,7,8,9);
59};
42 60
61#$c0->save (0);
62#$c1->save (-1);
63
64#Coro::State::enable_times 1;
65#use Coro::Debug; Coro::Debug::command "ps";#d#
66#(async {
67 $main = $Coro::current;
68
69 transfer($main, $c0);
70 transfer($main, $c1);
71
43timethese 100000, { 72 timethese 5000000, {
44 method => '$a->a; $a->a; $a->a; $a->a', 73 function => 'a(5); a(6)',
45 resume => '$b->resume; $b->resume', 74 method => '$a->b(5); $a->b(6)',
46 transfer => 'transfer($main, $c); transfer($main, $c)', 75 cede => 'cede',
47}; 76 transfer0 => 'transfer($main, $c0)',
77 transfer1 => 'transfer($main, $c1)',
78 };
79#})->join;
80#use Coro::Debug; Coro::Debug::command "ps";#d#
81
82

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines