我刚用DProf描述了我的代码:
Total Elapsed Time = 9.969922 Seconds
User+System Time = 0.049922 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
40.0 0.020 0.020 2 0.0100 0.0100 main::difference
40.0 0.020 0.020 3 0.0067 0.0066 main::BEGIN
0.00 - -0.000 1 - - DynaLoader::dl_install_xsub
0.00 - -0.000 1 - - Data::Dumper::bootstrap
0.00 - -0.000 1 - - strict::import
0.00 - -0.000 1 - - warnings::BEGIN
0.00 - -0.000 1 - - warnings::import
0.00 - -0.000 1 - - bytes::import
0.00 - -0.000 1 - - strict::bits
0.00 - -0.000 1 - - DynaLoader::dl_load_file
0.00 - -0.000 1 - - DynaLoader::dl_undef_symbols
0.00 - -0.000 1 - - DynaLoader::dl_find_symbol
0.00 - -0.000 1 - - overload::BEGIN
0.00 - -0.000 2 - - warnings::register::mkMask
0.00 - -0.000 2 - - Exporter::import
所以我的difference
子程序占用了大约40%的时间,BEGIN
占用了另外40%的子程序。我不太确定其他9.8秒发生了什么。任何人都可以向我解释Perl在剩下的时间里做了什么吗?
基本上,我的代码接受两个数组,执行设置差异,并写入文件。文件不是太大(23,028个字符)。这是我的difference
子程序,如果你很好奇:
sub difference {
my @array1 = @{$_[0]};
my @array2 = @{$_[1]};
my %in_array1 = map {$_ => 1} @array1;
my @diff = grep {not $in_array1{$_}} @array2;
return @diff;
}
答案 0 :(得分:1)
Devel :: DProf已弃用,所以我不知道它是否有效。
使用Devel :: NYTProf(https://metacpan.org/module/Devel::NYTProf),这是一个非常有用的Perl分析器。
答案 1 :(得分:1)
Perl很可能只是在等待。要么是睡眠(),要么脚本正在等待磁盘或网络输入/输出或外部命令(系统/执行/反引号)或类似的东西。您可以使用以下脚本轻松地重现它:
#!/usr/bin/perl
x();
sub x {
sleep 10;
}
我系统上的dprofpp输出是:
Total Elapsed Time = 9.999998 Seconds
User+System Time = 0 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
0.00 - -0.000 1 - - main::x