我有一些代码:
for my $t (1..$threads) {
push @threads, threads->create(\&action_, $t);
}
for my $t (@threads) {
$t->join();
}
sub action_ {
while (@sites) {
my $url = shift @sites;
for my $data1 (@data) {
for my $data2 (@data2) {
something($url, $data1, $data2);
}
}
}
}
如何获得速度(呼叫数量方法"某些东西")每秒(或分钟)? 感谢。
答案 0 :(得分:2)
Perl在CPAN中有许多基准测试模块。看看:http://perldoc.perl.org/Benchmark.html
这很好地解释了;基本上你想要基准测试的代码包含在子程序中,你可以自由地计算或比较不同的例程。
我最常使用的方法是在“方法”和“新建”标题下。
答案 1 :(得分:2)
如果您希望自己快速完成,可以像以下那样获得粗略估计:
use List::Util qw(sum);
use feature qw(say);
...
my $t0 = time(); # See also Time::HiRes
threads->create(\&action_) for 1 .. $nthreads;
my $nsomething = sum map { $_->join } threads->list();
my $elapsed = time() - $t0;
say "Among $nthreads threads we called something() ",
($nsomething/$elapsed),
" times per second";
sub action_ {
my $n;
while (...) { ... something(); $n++; ... }
return $n;
}
如果这还不够好,您可能每次调用something()
将调用它的时间推送到threads::shared::share()
d数组 - 或者在连接后收集的线程局部数组中(),或打印到受互斥锁保护的文件句柄或其他任何东西。然后你可以用你生成的时间序列做任何你喜欢的事情。