use Benchmark; use Apache::Session::Lock::MySQL; use vars qw($s $dbh); $s = { args => { LockDataSource => 'dbi:mysql:database=test;host=desk.eng.vivaldi', LockUsername => 'jwb', LockPassword => '' }, data => { _session_id => '' } }; $dbh = DBI->connect('dbi:mysql:database=test;host=desk.eng.vivaldi', 'jwb', '', {RaiseError => 1}); sub loop { $s->{data}->{_session_id} = int(rand(2**20)); my $l = new Apache::Session::Lock::MySQL; $l->acquire_read_lock($s); $l->acquire_write_lock($s); } timethis(1000, \&loop, 'Connect 1000 Times'); $s->{args}->{LockHandle} = $dbh; timethis(10000, \&loop, 'Connect Once, Lock 10000 Times'); `mkfifo sync`; for ($n = 10; $n <= 100; $n += 10) { $dbh->disconnect; my $is_child; for (my $i = 0; $i < $n - 1; $i++) { my $pid = fork; if (!$pid) { $is_child = 1; open (SYNC, ">sync") || die $!; last; } } if (!$is_child) { print "Sleeping 2 seconds to sync children\n"; sleep 2; open(GO, "connect('dbi:mysql:database=test;hostname=desk.eng.vivaldi', 'jwb', '', {RaiseError => 1}); $s->{args}->{LockHandle} = $dbh; timethis(-1, \&loop, "$n Children"); if ($is_child) { exit(); } for (my $i = 0; $i < $n - 1; $i++) { wait(); } close GO; } unlink "sync";