1

我是新玩家,正在使用它進行同步數據庫調用,並且有一些我不清楚或誤解的內容;首先在我application.conf的我把下面的代碼Play Framework在向服務器添加更多資源時是否會產生線程池規模

play { 
    akka { 
    akka.loggers = ["akka.event.slf4j.Slf4jLogger"] 
    loglevel = WARNING 
    actor { 
     default-dispatcher = { 
     fork-join-executor { 
      parallelism-min = 300 
      parallelism-max = 300 
     } 
     } 
    } 
    } 
} 

這是我從https://www.playframework.com/documentation/2.3.x/ThreadPools了,也看過Play Framework and Threadpools。這意味着您始終有300個線程可用於阻止數據庫操作?或最大每秒300個請求?如果我有更多的資源到更多的RAM,CPU或核心服務器的增加可用線程的數量嗎?例如,如果我購買了具有4個內核的服務器等,可用線程是否會跳到1,200?正如之前所說的,我所有的行爲都阻止了用戶註冊到用戶聊天,所以在他們變得更加昂貴之前,試圖讓我誤解。

回答

3

我也想知道這整個Akka和線程的東西一段時間,所以我做了一些研究,這就是我想出的。我希望它有幫助。

由於其線程管理和併發性,使用Akka。好處是,您不必再在應用程序編程期間關心併發的麻煩。

阿卡使用dispatchers來管理它的處理器時間的參與者(演員都是在實際計算中阿卡發生)。

調度員是Akka.NET最重要的部分之一,因爲他們控制每個參與者的吞吐量和時間份額,爲每個參與者提供公平的資源份額。

Akka允許不同的調度程序,但默認的是'fork-join-executor',這也是Play默認使用的一個。

在組態中,因爲你希望你的線程池的大小相當大,因爲你有很多同步數據庫調用線程的最小和最大行數設置爲300。這樣你解決線程300的數量。您有300個線程,與您的處理器數量無關。如果你購買一臺擁有更多處理器的新服務器,它仍然是300.

否則,如果不設置線程的最小和最大數量,調度程序將沿公式available processors * parallelism-factor進行一些計算。當然,您也可以將此並行性因素設置爲適應不同服務器的不同處理器數量。所以如果你把這個並行性因子設置爲75,那麼在帶有4個處理器的服務器上會導致最多300個線程,並且在有8個處理器的情況下會導致最多600個線程。

在阿卡的源代碼它的記錄用:

的平行因子被用於確定使用 下式線程池尺寸爲:ceil(可用處理器*因子)。然後,結果大小 受平行度最小值和平行度最大值的限制。

如果您想了解更多關於Akka和調度員的信息,我推薦使用akka-concurrency-test的文檔,它本身有一個很好的源代碼列表。

相關問題