Top > Perl > Benchmark lock
ふと気になって、CGI の排他ロックなどでよく使われる flock(), mkdir(), symlink() の実行コストを比べてみた。結果は軽いほうから flock() < mkdir() < symlink() の順。
個人的には symlink() をよく利用していますが、flock() は予想通り速い。以下はテストコード。
#!/usr/bin/perl
use strict;
use Benchmark;
my $file = 'f.dat';
my $lock = 'f.lock';
my $count = shift || 1000;
my $loop = shift || 1000;
open(F, ">$file") or die "Can not open $file: $!";
timethese($count, {
flock => sub {
for (my $i = 0; $i < $loop; $i++) {
flock(F, 2);
flock(F, 8);
}
},
mkdir => sub {
for (my $i = 0; $i < $loop; $i++) {
mkdir($lock, 0755);
rmdir($lock);
}
},
symlink => sub {
for (my $i = 0; $i < $loop; $i++) {
symlink(".", $lock);
unlink($lock);
}
},
});
close(F);
__END__
実行結果
Benchmark: timing 1000 iterations of flock, mkdir, symlink...
flock: 3 wallclock secs ( 0.41 usr + 2.31 sys = 2.73 CPU)
mkdir: 144 wallclock secs ( 0.95 usr + 142.73 sys = 143.68 CPU)
symlink: 775 wallclock secs ( 1.51 usr + 125.84 sys = 127.34 CPU)
2003/12/14 12:56
Bulkfeeds で関連記事検索
Bulkfeeds で関連記事検索
TrackBack(0)
TrackBack URL for this entry: http://www.asmate.net/mt/mt-tb.cgi/48
コメントする
