我正在改變線程池執行程序的傳統設計。具體如下: -線程池執行程序
遺留: - 在傳統設計的情況下,在應用程序啓動時創建600個線程。 ,並放置在各種池中,然後在需要時拾取並將任務分配給相應的線程。
新: - 在新的設計我換成執行服務線程池
ThreadPoolExecutor thpool = new ThreadPoolExecutor(coreSize,poolsize,...);
我所觀察到的是,在執行程序的情況下,在啓動時創建的螺紋。它們是在客戶端發起請求時創建的。由於內存中創建的線程與前一個線程相比較少。
但我的問題是這是正確的方式,因爲線程創建也是在觸發時發生的開銷。
請告訴哪一個更重,進程在客戶端調用時創建線程或根據傳統方法在內存中存在空閒線程。
還建議使用哪個執行程序池以便在性能方面獲得最佳結果。
我們如何計算需要的線程數量?猜測我們有一個公式: - CPU數量*性能吞吐量*(1 + W/C)其中W是等待時間,C是所需的計算時間。 請詳細告訴我如何獲得所需的線程數。 – Scientist
不確定你的_Performance throughput_是什麼,但看到我的編輯。 –
Hi Ralf, 感謝您的意見。那麼,但我已經進入修復。 我創建了一個ThreadPoolExecutor,其核心大小爲maxpoolsize/5,並使用LinkedBlockingQueue作爲隊列。 我已經調用了方法「prestartAllCoreThreads」,它在啓動時啓動大約170個線程的所有核心線程。 – Scientist