ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/eg/bench
Revision: 1.5
Committed: Tue Jul 17 15:42:28 2001 UTC (22 years, 10 months ago) by root
Branch: MAIN
Changes since 1.4: +6 -4 lines
Log Message:
*** empty log message ***

File Contents

# Content
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 $n++; # do something to taint the benchmark results ;)
16 }
17
18 $b = async {
19 # do a little unrolling...
20 while() {
21 yield; yield; yield; yield; yield;
22 }
23 };
24
25 yield;
26
27 $main = $Coro::main;
28
29 *transfer = \&Coro::State::transfer;
30
31 $c = Coro::State::_newprocess [sub {
32 while() {
33 # some unrolling here as well..
34 transfer($c, $main); transfer($c, $main);
35 transfer($c, $main); transfer($c, $main);
36 transfer($c, $main); transfer($c, $main);
37 }
38 }];
39
40 transfer($main, $c);
41
42 timethese 100000, {
43 method => '$a->a; $a->a',
44 resume => 'yield',
45 transfer => 'transfer($main, $c)',
46 };
47