ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/eg/bench
Revision: 1.18
Committed: Sun Jan 20 10:22:07 2008 UTC (16 years, 4 months ago) by root
Branch: MAIN
CVS Tags: rel-4_748, rel-4_8, rel-4_741, rel-4_743, rel-4_742, rel-4_744, rel-4_747, rel-4_74, rel-4_71, rel-4_72, rel-4_73, rel-4_802, rel-4_803, rel-4_801, rel-4_804, rel-4_479, rel-4_50, rel-4_51, rel-4_4, rel-4_45, rel-4_745, rel-4_49, rel-4_48, rel-4_746, rel-4_47, rel-4_46, rel-4_7, rel-4_37
Changes since 1.17: +1 -1 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.16 cede; cede; cede; cede; cede;
26 root 1.1 }
27     };
28    
29 root 1.8 cede;
30 root 1.1
31     $main = $Coro::main;
32    
33 root 1.3 *transfer = \&Coro::State::transfer;
34 root 1.1
35 root 1.8 sub doit0 {
36     while() {
37     # some unrolling here as well..
38 root 1.15 transfer($c0, $main); transfer($c0, $main);
39     transfer($c0, $main); transfer($c0, $main);
40     transfer($c0, $main); transfer($c0, $main);
41     transfer($c0, $main); transfer($c0, $main);
42 root 1.8 }
43     }
44    
45     sub doit1 {
46 root 1.1 while() {
47 root 1.5 # some unrolling here as well..
48 root 1.15 transfer($c1, $main); transfer($c1, $main);
49     transfer($c1, $main); transfer($c1, $main);
50     transfer($c1, $main); transfer($c1, $main);
51     transfer($c1, $main); transfer($c1, $main);
52 root 1.1 }
53 root 1.6 }
54    
55 root 1.11 $c0 = new Coro::State sub {
56 root 1.8 doit0(1,2,3,4,5,6,7,8,9);
57 root 1.11 };
58 root 1.8
59 root 1.11 $c1 = new Coro::State sub {
60 root 1.8 doit1(1,2,3,4,5,6,7,8,9);
61 root 1.11 };
62 root 1.1
63 root 1.17 #$c0->save (0);
64     #$c1->save (-1);
65 root 1.15
66     transfer($main, $c0);
67     transfer($main, $c1);
68 root 1.1
69 root 1.18 timethese 5000000, {
70 root 1.12 function => 'a(5); a(6)',
71     method => '$a->b(5); $a->b(6)',
72     cede => 'cede',
73 root 1.15 transfer0 => 'transfer($main, $c0)',
74     transfer1 => 'transfer($main, $c1)',
75 root 1.1 };
76 root 1.5
77 root 1.13
78 root 1.14