2012-06-13 49 views
2

我正在嘗試基於經典工作者池模型製作一個Scala應用程序服務器。 鑑於:Scala:corePoolSize以最大化Actor性能

  1. 該機擁有四核處理器
  2. 有專用於阻塞網絡I/O聽
  3. 工人的演員都是無阻塞調度演員。

corePoolSize最大化性能的最佳值是什麼? 理想情況下,當工作線程池的大小等於處理器內核的數量時,性能最大化。 因此,在這種情況下,我猜最佳值爲5(調度程序爲1,工作人員爲4),或者我可以將值設置爲4並覆蓋調度程序actor的調度程序方法,以便它不與工人共享線程池。

這是正確的嗎?任何意見讚賞。 謝謝!

回答

6

只是一些提示。

理想情況下,當工作線程池的大小等於處理器核心的數量時,性能最大化。

不是。這裏是你如何估計線程數量上,你可以得到最大的吞吐量:

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

其中N = number of threadsC = number of CPU coresU = target CPU utilization rateW/C = Waiting time to Computing time ratio(等待時間意味着IO等)。

但請注意,上述等式僅考慮CPU,並且CPU不是唯一要管理的資源。調整響應時間也會有點不同。

陳腔濫調的答案是,你必須測試,看看什麼是最好的選擇。你可以用上面的公式作爲出發點。還要注意核心池大小!=最大池大小。

+0

謝謝你的回答,Zwei。它有幫助。 :) –