簡體   English   中英

javac對CPU利用率感到瘋狂ECJ能夠為多線程生產者 - 消費者維持可預測的CPU利用率

[英]javac goes crazy on CPU utilization ECJ is able to maintain a predictable CPU utilization for a multi-threaded Producer -Consumer

我正在運行1個生產者線程,1個消費者線程問題,共享緩沖區和臨時緩存(1000個元素)。

eclipse執行(ECJ)使用33%的CPU(1個核心用於生產者,1個用於消費者,1個用於主要線程{最小處理})。

在執行在javac上編譯的相同代碼時,我看到50%的利用率(所有8個虛擬核心顯示一些處理)。

我使用的是Windows 8; 具有超線程的四核系統(因此是8個虛擬核)。

有人可以解釋一下嗎? 我的代碼在2個優化中的表現如此不同?

這是代碼: http//pastebin.com/NBkRTcxV

回顧一下:我想知道為什么javac編譯比ECJ使用了更多的CPU? 請理解我只有2個線程(1個生產者和1個消費者),所以理想情況下只應使用2個核心(= 1個物理核心)(= 25%CPU)

CPU可以自由地在不同的內核之間划分線程。 有一些本機庫允許您設置線程親和性,例如我們自己的Peter Lawrey的

有人可以解釋一下嗎? 我的代碼在2個優化中的表現如此不同?

操作系統線程調度程序很可能正在執行此操作,而與編譯器無關。

我的猜測是操作系統的線程調度程序注意到Eclipse線程具有交互行為(例如,在Java中處理窗口事件等),並保留容量來處理這個問題。

但它也可能是你的基准測量的一些人工制品。 人工基准通常有這個問題。


更新 - 如果您確信它是編譯器(javac與ejc),那么您可以通過從各自的編譯器獲取編譯代碼並從命令行執行它來證明或反駁這一點。

另一件事是使用更大比例的CPU實際上是一件好事。 測量執行“工作”量的時間。 “javac”版本可能使用更多的CPU,因為它的工作速度更快。

維持可預測的CPU利用率通常不是設計目標。 人們通常更關心應用程序執行(有用)工作的速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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