ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/eg/bench
Revision: 1.13
Committed: Mon Nov 27 02:15:51 2006 UTC (17 years, 6 months ago) by root
Branch: MAIN
Changes since 1.12: +1 -0 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #!/usr/bin/perl
2    
3     # ->resume is not exactly cheap (it saves/restores a LOT
4     # of global variables), but shouldn't be slow. just to show
5     # how fast it is, this little proggie compares a normal subroutine
6     # call with two calls of transfer in a loop.
7    
8     use Coro;
9     use Benchmark;
10    
11 root 1.12 sub a($) { }
12 root 1.8
13 root 1.1 $a = bless {}, main::;
14    
15 root 1.6 sub b {
16     my ($self) = shift;
17 root 1.7 $self->{b} = shift if @_;
18     $self->{b};
19 root 1.1 }
20    
21 root 1.4 $b = async {
22 root 1.1 # do a little unrolling...
23     while() {
24 root 1.8 cede; cede; cede; cede; cede;
25 root 1.1 }
26     };
27    
28 root 1.8 cede;
29 root 1.1
30     $main = $Coro::main;
31    
32 root 1.3 *transfer = \&Coro::State::transfer;
33 root 1.1
34 root 1.8 sub doit0 {
35     while() {
36     # some unrolling here as well..
37 root 1.9 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);
40 root 1.12 transfer($c0, $main, 0); transfer($c0, $main, 0);
41 root 1.8 }
42     }
43    
44     sub doit1 {
45 root 1.1 while() {
46 root 1.5 # some unrolling here as well..
47 root 1.9 transfer($c1, $main, -1); transfer($c1, $main, -1);
48     transfer($c1, $main, -1); transfer($c1, $main, -1);
49     transfer($c1, $main, -1); transfer($c1, $main, -1);
50 root 1.12 transfer($c1, $main, -1); transfer($c1, $main, -1);
51 root 1.1 }
52 root 1.6 }
53    
54 root 1.11 $c0 = new Coro::State sub {
55 root 1.8 doit0(1,2,3,4,5,6,7,8,9);
56 root 1.11 };
57 root 1.8
58 root 1.11 $c1 = new Coro::State sub {
59 root 1.8 doit1(1,2,3,4,5,6,7,8,9);
60 root 1.11 };
61 root 1.1
62 root 1.9 transfer($main, $c0, 0);
63     transfer($main, $c1, -1);
64 root 1.1
65 root 1.10 timethese 1000000, {
66 root 1.12 function => 'a(5); a(6)',
67     method => '$a->b(5); $a->b(6)',
68     cede => 'cede',
69     transfer0 => 'transfer($main, $c0, 0)',
70     transfer1 => 'transfer($main, $c1, -1)',
71 root 1.1 };
72 root 1.5
73 root 1.13