簡體   English   中英

缺陷固定線程池的缺點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM