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