| | 11 | $cache = shift || 'memcached'; |
| | 12 | $volume = shift || 10000; |
| | 13 | |
| | 14 | $default[0] = $cache eq 'memcached' |
| | 15 | ? { |
| | 16 | storage_class => 'Cache::Memcached::Fast', |
| | 17 | storage_args => [ |
| | 18 | { servers => [qw/ 127.0.0.1:1121%s /] }, |
| | 19 | ], |
| | 20 | key_rule => 'SERIALIZE', # SERIALIZE / LIST |
| | 21 | } |
| | 22 | : $cache eq 'fastmmap' |
| | 23 | ? { |
| | 24 | storage_class => 'Cache::FastMmap', |
| | 25 | storage_args => [ |
| | 26 | share_file => '/tmp/fastmmap_%s.bin', |
| | 27 | unlink_on_exit => 1, |
| | 28 | ], |
| | 29 | key_rule => 'SERIALIZE', # SERIALIZE / LIST |
| | 30 | } |
| | 31 | : die "Illegal cache option: $cache" |
| | 32 | ; |
| | 33 | |
| | 34 | use Storable qw/dclone/; |
| | 35 | $default[1] = dclone($default[0]); |
| | 36 | |
| | 37 | no strict 'refs'; |
| | 38 | map { |
| | 39 | my $args_ref = $default[$_]->{storage_args}; |
| | 40 | if ($cache eq 'memcached') { |
| | 41 | my $serv_ref = $args_ref->[0]->{servers}; |
| | 42 | $serv_ref->[0] = sprintf $serv_ref->[0], $_ + 1; |
| | 43 | } |
| | 44 | if ($cache eq 'fastmmap') { |
| | 45 | $args_ref->[1] = sprintf $args_ref->[1], $_; |
| | 46 | } |
| | 47 | } (0, 1); |
| | 48 | |
| | 49 | } |
| | 50 | |
| | 51 | print "Benchmark test using $cache($volume) :", "\n"; |
| | 52 | |
| | 53 | AT_STARTUP_SCRIPT : |
| | 54 | { |
| | 55 | use Method::Cached::Manager -default => shift @default; |
| | 56 | use Method::Cached2 -default => shift @default; |
| | 57 | } |
| | 58 | |
| | 59 | AT_PACKAGE : |
| 55 | | package main; |
| 56 | | |
| 57 | | use Benchmark qw/cmpthese/; |
| 58 | | |
| 59 | | my $num = 13; |
| 60 | | |
| 61 | | my ($fib, $c_fib, $c2_fib, $m_fib); |
| 62 | | |
| 63 | | sub fib { $fib = $num; $fib = Dummy::fib($fib) } |
| 64 | | sub c_fib { $c_fib = $num; $c_fib = Dummy::fib_cache($c_fib) } |
| 65 | | sub c2_fib { $c2_fib = $num; $c2_fib = Dummy::fib_cache2($c2_fib) } |
| 66 | | sub m_fib { $m_fib = $num; $m_fib = Dummy::fib_memoize($m_fib) } |
| 67 | | |
| 68 | | cmpthese(10000, { |
| 69 | | 'fib' => \&fib, |
| 70 | | 'Cached' => \&c_fib, |
| 71 | | 'Cached2' => \&c2_fib, |
| 72 | | 'Memoize' => \&m_fib, |
| 73 | | }); |
| | 85 | AT_MAIN : |
| | 86 | { |
| | 87 | use Benchmark qw/cmpthese/; |
| | 88 | |
| | 89 | my $num = 13; |
| | 90 | |
| | 91 | my ($fib, $c_fib, $c2_fib); |
| | 92 | |
| | 93 | sub fib { $fib = $num; $fib = Dummy::fib($fib) } |
| | 94 | sub c_fib { $c_fib = $num; $c_fib = Dummy::fib_cache($c_fib) } |
| | 95 | sub c2_fib { $c2_fib = $num; $c2_fib = Dummy::fib_cache2($c2_fib) } |
| | 96 | |
| | 97 | cmpthese($volume, { |
| | 98 | 'fib' => \&fib, |
| | 99 | 'Cached' => \&c_fib, |
| | 100 | 'Cached2' => \&c2_fib, |
| | 101 | }); |
| | 102 | } |