[英]Drawbacks to an idling fixed threadpool
我目前正在對軟件進行各種性能改進。 由於它使用SWT作為它的GUI,我遇到了一個問題,在某些情況下,在顯示線程中創建了很多UI元素。 由於我之前的人,並沒有真正注意在顯示線程之外進行任何計算,整個軟件在啟動時幾秒鍾內都沒有響應。 我現在已經隔離了需要在Display Thread中執行的代碼,現在我正在計算Runnables中我提交給固定Threadpool的所有其他內容。 我正在使用這樣的游泳池:
public abstract class AbstractChartComposite {
private static ExecutorService pool = Executors.newFixedThreadPool(8);
private List<String> currentlyProcessingChartItems = new ArrayList<>();
protected void doCalculate(constraints){
for (IMERuntimeConstraint c : constraints) {
if(!currentlyProcessingChartItems.contains(c.getId())){
currentlyProcessingChartItems.add(c.getId());
pool.submit(new Runnable(){
@Override
public void run() {
try{
createChartItem(c);
currentlyProcessingChartItems.remove(c.getId());
}catch(Throwable e){
e.printStackTrace();
}
}
});
}
}
}
}
我現在想知道,一旦創建了所有UI元素,如果讓Threadpool在空閑狀態下運行有任何缺點。 我無法真正關閉垃圾收集,因為當需要創建新元素時,將再次需要用戶輸入。 離開線程池沒有提交運行的Runnables有什么主要缺點嗎?
不,沒有缺點。
線程將不會實際運行 ,它們將被停放,直到提交新任務。 所以它不會影響CPU。 另外你說你將再次使用這個池,所以在你的情況下,沒有必要關閉它並重新創建。
至於內存 - 是的,空閑線程會消耗一些內存,但這也不是問題,直到你有數百(數千?)個線程。
另外,一條建議。 不要做過早的優化。 這是萬惡之源。 一旦遇到真正的性能問題,使用特殊實用程序並檢測瓶頸,就可以分析問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.