ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/eg/bench
Revision: 1.22
Committed: Sat Jun 11 13:49:00 2011 UTC (12 years, 11 months ago) by root
Branch: MAIN
CVS Tags: rel-6_0, rel-6_5, rel-6_10, rel-6_09, rel-6_08, rel-6_07, rel-6_06, rel-6_05, rel-6_04, rel-6_03, rel-6_02, rel-6_01, rel-6_512, rel-6_513, rel-6_511, rel-6_514, rel-6_32, rel-6_33, rel-6_31, rel-6_36, rel-6_37, rel-6_38, rel-6_39, rel-6_23, rel-6_29, rel-6_28, rel-6_46, rel-6_45, rel-6_51, rel-6_52, rel-6_53, rel-6_54, rel-6_55, rel-6_56, rel-6_57, rel-6_43, rel-6_42, rel-6_41, rel-6_47, rel-6_44, rel-6_49, rel-6_48, HEAD
Changes since 1.21: +12 -12 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 sub a($) { }
12
13 $a = bless {}, main::;
14
15 sub b {
16 my ($self) = shift;
17 $self->{b} = shift if @_;
18 $self->{b};
19 }
20
21 $b = async {
22 # do a little unrolling...
23 while() {
24 cede; cede; cede; cede; cede;
25 cede; cede; cede; cede; cede;
26 }
27 };
28
29 cede;
30
31 *transfer = \&Coro::State::transfer;
32
33 sub doit0 {
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 }
41 }
42
43 sub doit1 {
44 while() {
45 # some unrolling here as well..
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);
50 }
51 }
52
53 $c0 = new Coro::State sub {
54 doit0(1,2,3,4,5,6,7,8,9);
55 };
56
57 $c1 = new Coro::State sub {
58 doit1(1,2,3,4,5,6,7,8,9);
59 };
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
72 timethese 5000000, {
73 function => 'a(5); a(6)',
74 method => '$a->b(5); $a->b(6)',
75 cede => 'cede',
76 transfer0 => 'transfer($main, $c0)',
77 transfer1 => 'transfer($main, $c1)',
78 };
79 #})->join;
80 #use Coro::Debug; Coro::Debug::command "ps";#d#
81
82