2012-11-20 42 views
0

我們如何爲非本地線程定義「線程CPU時間」?更具體地說,它是如何在JVM上定義的(其中CPU是從JVM中抽象出來的,所以定義可能與低層次過程稍有不同)......線程CPU時間的定義是什麼?

我正在從JVM執行此測量:http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/management/ThreadMXBean.html似乎不直接定義「線程CPU時間」是直接測量的內容。

+0

對於初學者:http://en.wikipedia.org/wiki/CPU_time –

+1

實際上,除了給定線程所消耗的CPU時間量之外,還有哪些可能?我不確定我是否理解這個問題。 – NPE

+1

也許你正在考慮非本地線程。計算非本地線程的CPU時間可能很困難,因爲JVM(通常是任何進程)不知道它何時獲得CPU時間(它可以知道它獲得了多少線程,但它不能計算使用哪些線程它)。但對於本機線程,操作系統提供該信息。 – SJuan76

回答

1

線程CPU時間已經是一個非常通用的術語。基本上它代表了CPU花費在給定線程上的時間量。

它的定義沒有任何區別,因爲它位於JVM上,唯一需要考慮的重要部分是JVM是否允許您測量它。有些是做的,有些則沒有。

+0

是的,但問題是 - 花了多少時間?如果一個線程擁有CPU但是沒有做任何事情呢? – jayunit100

+0

花費的時間是CPU給線程的任何時間。線程是否「有用」工作與否無關緊要。在一個while循環中旋轉或計算前N個素數,仍然是無法提供給其他進程的時間。 – thedan

+0

感謝這非常有幫助 - 我想我的「真正」問題實際上可能是「如何」一個Java程序可能知道真正的CPU給它多少時間。 – jayunit100

1

一個不一定要打破抽象。 POSIX確定了一種方法來衡量每個線程的CPU時間。然後還有的Windows :)

通過熱點源搜索,我看到:

熱點/ src目錄/股/ VM /運行/ os.hpp

// JVMTI & JVM monitoring and management support 
    // The thread_cpu_time() and current_thread_cpu_time() are only 
    // supported if is_thread_cpu_time_supported() returns true. 
    // They are not supported on Solaris T1. 

熱點/ src目錄/os/linux/vm/os_linux.cpp我看到pthread_getcpuclockidclock_gettime一起被用於此目的

hotspot/src/os/windows/vm/os_windows.cpp,我看到GetThreadTimes被使用。

相關問題