2015-05-29 156 views
2

Play框架暴露給我的應用程序的線程數是否有限制? Play應用程序中的線程大小是否寶貴?如果我使用自己在應用程序中創建的線程池而不使用Play提供的線程池,該怎麼辦?這是建議嗎?任何人都可以拋出一些關於如何處理線程的燈光?Play Framework和Threadpools

+0

任何接受者?有什麼建議麼? – sparkr

回答

2

您的Play應用程序中線程的限制將不得不基本上由分配給VM的最大內存決定。線程將消耗相當數量的內存,因爲它們擁有自己的堆棧。從本質上講,可能的最大線程數取決於您將傳遞給JVM的參數以及計算機上的總RAM等。

您應該讓Play爲您管理線程。配置文檔位於here。 Play的一部分設計可以最大限度地減少所需的線程數量,因此除非您進行大量阻止呼叫,否則您不需要觸摸它。

Play使用Akka處理線程。內部角色系統的配置可以在here找到。在這個多汁的部分是parallelism-factorparallelism-max。如果我們看一下很好的註釋reference configuration爲阿卡:

# The parallelism factor is used to determine thread pool size using the 
# following formula: ceil(available processors * factor). Resulting size 
# is then bounded by the parallelism-min and parallelism-max values. 
parallelism-factor = 3.0 

# Max number of threads to cap factor-based parallelism number to 
parallelism-max = 64 

Play的parallelism-factor通過默認設置爲1的基礎上,參考配置。這意味着,默認情況下,Play的線程池將等於可用處理器的數量,最多爲24個。

+0

如果我使用自己的ExecutionContext進行阻止操作而不使用Play中的ExecuteContext會發生什麼?這是一個好方法嗎? – sparkr

+0

說實話,它不會有太大的區別,因爲你使用線程的方式。如果你打算阻止呼叫,唯一要做的就是使用配置來增加Play的線程池大小。 –

+0

看看monifu https://github.com/monifu/monifu/wiki/Schedulers這似乎使用了一個不同的執行上下文,可以創建和產生獨立於我從Play獲得的線程池的線程? – sparkr