2016-05-10 132 views
2

我有一個關於使用fork連接線程池的簡單問題。這裏是我正在使用的一個簡短的例子:配置叉連接線程池

executor = "fork-join-executor" 
    # Configuration for the fork join pool 
    fork-join-executor { 
    # Min number of threads to cap factor-based parallelism number to 
    parallelism-min = 24 
    # Parallelism (threads) ... ceil(available processors * factor) 
    parallelism-factor = 4.0 
    # Max number of threads to cap factor-based parallelism number to 
    parallelism-max = 48 
    } 

我不確定的是,在這種情況下將創建多少個線程?我在2核心機器上運行,因此每個核心有24個線程,最多有48個線程?

將並行度因子設置爲4.0時,可以並行運行的線程數將爲8.那麼設置最小值和最大值的需求是什麼,我的情況是24和48?

+0

在你的代碼示例中,是akka配置? – Mifeet

+0

是的,這就是akka的配置風格! – sparkr

回答

3

我們先來解釋ForkJoinPool中的並行性是如何工作的。線程數由單個(構造函數)參數parallelism(默認情況下設置核心數)控制。 ForkJoinPool試圖保持最多parallelism運行線程。但它可以決定產生更多的線程,如果其中一些線程被阻塞的話。例如。如果您有太多正在等待連接的分叉任務,則除非添加新線程,否則您的計算將被阻止;等待的線程是活動但不是運行(因爲他們在等待)。更多解釋here

問題中的調度程序配置控制parallelism參數將設置爲什麼值。它被設置爲可用的處理器 * parallelism-factor但是至少parallelism-min和最多parallelism-max。查看更多信息herehere

在這種情況下將創建多少個線程?

並行度應該是2 cores * 4 -> 8 threads。所以正在運行的線程數應該是8,但創建的線程總數可能會更高。

什麼是需要設置的最大值和最小值這是我的情況是24和48

我認爲這只是在你有不同數量的核心部署一臺機器上的情況。