Tomcat 默認允許最多 200 個執行緒處理 Spring Boot 應用程式中的請求。假設在應用程式中,在行程啟動期間,我創建了一個大小為 10 的 FixedThreadpool。
現在,當我嘗試將這個東西與 tomcat 一起使用時,我將運行的最大執行緒總數是多少。是 200 10 還是 200 * 10?
我的理解是它將是 200 10,因為在行程級別只有 java 會創建執行緒池并在需要時使用該執行緒池。
它還取決于我如何啟動執行緒池?例如,假設我創建了一個執行緒池執行器 bean 并在整個系統中使用它。
@Bean("helperExecutorService")
public ExecutorService helperExecutorService(HelperThreadPoolConfig helperThreadPoolConfig) {
return Executors.newFixedThreadPool(helperThreadPoolConfig.getThreadPoolSize());
}
或者我可以在代碼流中創建執行緒池。
public void something() {
ExecutorService service = Executors.newFixedThreadPool(summariesToAutocompute.size());
... use this threadpool in the method
}```
uj5u.com熱心網友回復:
對于一個運行在tomcat上的應用實體,tomcat在服務器啟動時會創建一個執行緒池,應用程式在啟動時會創建一個固定的執行緒池。這不是一個無共享的 cgi,它是一個長時間運行的 Java 行程,它保留在記憶體中,200 10 是正確的。
如果您在方法呼叫中創建一個池,那么每個方法呼叫都會分配自己的池。因此,如果 tomcats 池中的每個執行緒都同時發出一個請求,該請求呼叫了一個創建自己的池的方法,那么正在使用的執行緒數可能高達 tomcat 池大小乘以方法池大小。
一般來說,我建議不要這樣做,因為它似乎削弱了使用池的兩個優點:1)您可以預先分配執行緒,因此您的代碼不必等待執行緒創建,以及 2)您可以設定一個上限關于程式使用的最大執行緒數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/440597.html
