ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/eg/bench
Revision: 1.4
Committed: Tue Jul 17 00:24:15 2001 UTC (22 years, 11 months ago) by root
Branch: MAIN
Changes since 1.3: +4 -3 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     $a = bless {}, main::;
12    
13    
14     sub a {
15 root 1.3 $n++; # do something to taint the benchmark results ;)
16 root 1.1 }
17 root 1.4 $|=1;
18 root 1.1
19 root 1.4 $b = async {
20 root 1.1 # do a little unrolling...
21     while() {
22 root 1.3 yield; yield; yield; yield; yield;
23 root 1.1 }
24     };
25    
26 root 1.3 yield;
27 root 1.1
28     $main = $Coro::main;
29    
30 root 1.3 *transfer = \&Coro::State::transfer;
31 root 1.1
32 root 1.4 $c = Coro::State::_newprocess [sub {
33 root 1.1 while() {
34 root 1.3 transfer($c, $main); transfer($c, $main);
35     transfer($c, $main); transfer($c, $main);
36 root 1.1 }
37 root 1.4 }];
38 root 1.1
39     transfer($main, $c);
40    
41     timethese 100000, {
42     method => '$a->a; $a->a; $a->a; $a->a',
43 root 1.3 resume => 'yield; yield',
44 root 1.1 transfer => 'transfer($main, $c); transfer($main, $c)',
45     };