namazu-ml(avocado)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
cp vs cp.pl (Re: Plan for Namazu next version)
高林です
Satoru Takabayashi <ccsatoru@xxxxxxxxxxxxxxxxxx> wrote:
>3. UNIX/Win32 ともに Perl でコピーする (効率はどうなんでしょう?)
効率を調べてみました。 cp と Perl で作った cp.pl の比較です。サン
プルに使ったファイルは約 16 MB です。これは多分、一度目のアクセス
ですべてキャッシュに入るサイズなので、二度目以降のコピーにかかった
時間で比較すれば良いと思います。
-rw-r--r-- 1 ccsatoru ccsatoru 16056615 Jan 29 15:09 NMZ.i
まずは cp です。
saturn{~/products/test}$time cp NMZ.i NMZ.i_
real 0m5.953s
user 0m0.020s
sys 0m2.650s
saturn{~/products/test}$time cp NMZ.i NMZ.i_
real 0m3.971s
user 0m0.070s
sys 0m1.940s
saturn{~/products/test}$time cp NMZ.i NMZ.i_
real 0m4.219s
user 0m0.050s
sys 0m1.930s
次は cp.pl です。
saturn{~/products/test}$time perl cp.pl NMZ.i NMZ.i_
real 0m5.013s
user 0m0.770s
sys 0m1.900s
saturn{~/products/test}$time perl cp.pl NMZ.i NMZ.i_
real 0m4.771s
user 0m0.710s
sys 0m2.020s
saturn{~/products/test}$time perl cp.pl NMZ.i NMZ.i_
real 0m4.675s
user 0m0.510s
sys 0m2.090s
この結果を見ると、大体 cp は 4秒、 cp.pl は 4.7秒くらいです。この
程度なら許せる範囲だと思うのですが、いかがでしょう。
# user の部分の数字はずいぶん違いますが、これはなんでしょう?
実験用に作った、 cp.pl はこんな感じのものです。
#!/usr/bin/perl
use strict;
&cp($ARGV[0], $ARGV[1]);
sub cp ($$) {
my ($from, $to) = @_;
my ($buf);
open(FROM, "$from") || die "Can't open $from\n";
open(TO, ">$to") || die "Can't open $to\n";
while(read (FROM, $buf, 16384)) {
print TO $buf;
}
close(FROM);
close(TO);
}
--
高林 哲 Satoru Takabayashi