自分でそれを行う、またはfork()またはforkしない()

体積データをサイクルで計算する問題を解決することは、多くの場合、問題の並列化につながります。

もちろん、perlには、「マルチスレッド」の使用を可能にするフォークまたはスレッドの2つのモデルしかありません。 各メソッドの実装と宗教的な好みは、このノートの資料には適用されません。

「共有/非共有」の選択を数字で強化することについて説明します。



要するに、計算をプラスに加えて「別個のストリーム」に分離すると、子孫を作成し、彼と通信し、それを維持するオーバーヘッドに関連するファットマイナスもあります。

「マルチスレッド」のオーバーヘッドのコストを知っていれば、アプリケーションの1つまたは別のアーキテクチャを合理的に選択できると考えるのは論理的です。 そのため、たとえば次のようにして、計算する必要があります。



use Benchmark qw( timethese cmpthese ) ;



sub forked {

my $pid = fork;

$pid ? waitpid($pid, 0) : exit 0;

}



sub empty {

1;

}



my $r = timethese( -1, {

a => sub {forked(2)},

b => sub{empty(2)},

} );

cmpthese $r;




* This source code was highlighted with Source Code Highlighter .








単純なアクションの結果、次のような結果が得られます。



Benchmark: running a, b for at least 1 CPU seconds...

a: 7 wallclock secs ( 0.09 usr 0.96 sys + 1.93 cusr 3.45 csys = 6.43 CPU) @ 278.69/s (n=1792)

b: 2 wallclock secs ( 1.11 usr + 0.01 sys = 1.12 CPU) @ 2730666.07/s (n=3058346)

Rate a b

a 279/s -- -100%

b 2730666/s 979709% --



* This source code was highlighted with Source Code Highlighter .








それは、スレッド作成サイクルとそのメンテナンスにより、最大パフォーマンス278.69 / sが得られることを意味します。 これは、より速く実行される計算はすべて自分自身を考慮し、さらに面倒なことを意味します-私たちは子供たちに与えます!

多くの場合、数値を使用して結論を​​導き、正しい判断を下せるベンチマークを使用する必要があります。



All Articles