2

従来のワーカー プール モデルに基づいて Scala アプリケーション サーバーを作成しようとしています。とすれば:

  1. マシンにはクアッドコア プロセッサが搭載されています
  2. リッスンするネットワーク I/O をブロックする専用のスケジューラ アクターがあります。
  3. ワーカー アクターはすべてノンブロッキングです。

パフォーマンスを最大化するための corePoolSize の最適な値は? 理想的には、ワーカー スレッド プールのサイズがプロセッサ コアの数と等しいときに、パフォーマンスが最大化されます。したがって、この場合、最適な値は 5 (スケジューラーに 1、ワーカーに 4) であると思います。または、値を 4 に設定して、スケジューラー アクターのスケジューラー メソッドをオーバーライドして、ワーカーとスレッド プールを共有します。

これは正しいです?アドバイスをいただければ幸いです。ありがとう!

4

1 に答える 1

6

ほんの少しのヒント。

理想的には、ワーカー スレッド プールのサイズがプロセッサ コアの数と等しいときに、パフォーマンスが最大化されます。

あまり。最大スループットを得ることができるスレッド数を見積もる方法は次のとおりです。

N = C * U * (1 + W/C) 

ここN = number of threadsC = number of CPU cores、、、(待機時間はIOなどを意味します) U = target CPU utilization rateW/C = Waiting time to Computing time ratio

ただし、上記の式は CPU のみを考慮しており、管理するリソースは CPU だけではないことに注意してください。応答時間の調整も、少し別の問題です。

決まり文句の答えは、最良のオプションではないものを確認するためにテストする必要があるというものです。おそらく、上記の式を出発点として使用できます。コア プール サイズ != 最大プール サイズにも注意してください。

于 2012-06-13T06:44:58.343 に答える