我们如何为非本机线程定义“线程CPU时间”?更具体地说,它是如何在JVM上定义的(其中CPU是从JVM中抽象出来的,因此定义可能与较低级别的进程略有不同)....
我正在使用此测量的JVM实现:http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/management/ThreadMXBean.html这似乎不直接定义“线程CPU时间”是直接测量的。
答案 0 :(得分:1)
线程CPU时间已经是一个非常通用的术语。基本上它代表CPU在给定线程上花费的时间。
它没有任何不同的定义,因为它位于JVM上,唯一需要考虑的重要部分是JVM是否实际上允许您测量它。有些人做,有些则不做。
答案 1 :(得分: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.
在 hotspot / src / os / linux / vm / os_linux.cpp 中,我确实看到 pthread_getcpuclockid 以及用于此目的的 clock_gettime
在 hotspot / src / os / windows / vm / os_windows.cpp 中,我看到 GetThreadTimes 被使用。