1

私はいくつかのコードを持っています:

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);
      }
    }
  }
}

1秒(または1分)あたりの速度(メソッド「何か」の呼び出し数)を取得するにはどうすればよいですか? ありがとう。

4

2 に答える 2

2

Perl には、CPAN に多数のベンチマーク モジュールがあります。見てみましょう: http://perldoc.perl.org/Benchmark.html

これはそれをよく説明しています。基本的に、ベンチマークしたいコードはサブルーチンにまとめられており、さまざまなルーチンを自由に数えたり比較したりできます。

私が最も一般的に使用する方法は、「方法」および「新規」という見出しの下にあります。

于 2012-12-05T14:56:09.883 に答える
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;
}

それが十分でない場合は、呼び出された時刻をd 配列something()にプッシュする各呼び出しがある場合があります。 threads::shared::share(). その後、生成した時系列で好きなことを行うことができます。

于 2012-12-05T15:19:27.223 に答える