2012-03-03 18 views
4

我已經在GlassFish下的WorkManager +線程池使用TIMED_WAIT,比如這個:如果我在Java的TIMED_WAIT中有3000個線程,CPU的影響是什麼?

p: thread-pool-1; w: 2018 (TIMED_WAITING):

at java.lang.Object.wait(Native Method) 
at com.sun.corba.ee.impl.orbutil.threadpool.WorkQueueImpl.requestWork(WorkQueueImpl.java:171) 
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:528)` 

讓我們假設一下,如果線程什麼也不做(即,是不斷增加沒有工作) 。在池中有100個線程和池中有3000個線程之間,CPU使用率有差異嗎?

我們的測試顯示沒有,但我想確認。

+0

+1之前要求測試它 – artbristol 2012-03-03 08:47:06

回答

4

我想說這是OS特定的;我們在Linux服務器上的Java服務器軟件中運行了數千個線程,這些線程使用NPTL(Native Posix線程庫),但其中大多數線程大多數時間都處於「休眠」狀態,並且cpu使用率從未如此高,通常在5-20%之間(在單個4核CPU上)。我現在找不到任何參考,但我確信我已經閱讀了NPTL,睡眠線程的開銷可以忽略不計。

+0

這是CentOS 5.3 64位與Java 5.從我的理解它有NPTL,不應該造成很大的問題,是正確的? – Yon 2012-03-03 07:49:45

+0

正確,據我所知。這個頁面告訴你如何檢查系統是否具有NPTL,並使用NPTL提到CentOS 4(所以如果一個新的沒有使用它,我會感到驚訝):http://www.ducea.com/2006/05/24 /確定-nptl-version/AFAIK,2.6版內核的Linux發行版默認應該有NPTL。 – esaj 2012-03-03 07:54:11

+0

基於此,我們使用NPTL 2.5。所以一切都很好,我猜。 – Yon 2012-03-03 07:56:49

相關問題