2012-11-20 3 views
0

비 (非) 네이티브 스레드에 대해 "스레드 CPU 시간"을 어떻게 정의합니까? 좀 더 구체적으로 말하자면 JVM에서 CPU를 어떻게 추상화 했는가 (JVM에서 CPU가 추상화되어 있기 때문에 정의가 하위 프로세스와 약간 다를 수 있음) ...스레드 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

어쩌면 당신은 비원시 스레드의 관점에서 생각하고 있습니다. JVM (일반적으로 모든 프로세스)이 CPU 시간을 얻는 시간을 알지 못하기 때문에 (JVM (일반적으로 모든 프로세스)는 알 수 있습니다 (얼마나 많은 프로세스가 있는지 알 수 있지만 사용 된 스레드를 계산할 수 없으므로) 그것). 그러나 원시 스레드의 경우 OS가 해당 정보를 제공합니다. – SJuan76

답변

1

스레드 CPU 시간은 이미 꽤 일반적인 용어입니다. 기본적으로 CPU는 주어진 스레드에 소비 한 시간을 나타냅니다.

JVM에 있기 때문에 다르게 정의되지는 않지만 JVM에서 실제로 측정 할 수 있는지 여부는 고려해야 할 중요한 부분입니다. 일부는하지 않으며 그렇지 않은 사람도 있습니다.

+0

네,하지만 질문은 - 무엇이 시간을 보냈습니까? 만약 쓰레드가 CPU를 소유하고 있지만 그것으로 아무것도하지 않는다면? – jayunit100

+0

시간은 CPU가 스레드에 지정한 시간입니다. 스레드가 "유용한"작업을 수행하는지 여부는 관련성이 없습니다. while 루프에서 회전하거나 첫 번째 N 소수를 계산하면 다른 프로세스에 부여 할 수없는 시간입니다. – thedan

+0

감사합니다 이것은 매우 도움이됩니다 - 내 "실제"질문은 실제로 "어떻게"자바 프로그램이 실제 CPU가 얼마나 많은 시간을 제공하는지 알 수 있다고 생각합니다. – jayunit100

1

하나가 반드시 추상화를 깨뜨릴 필요는 없습니다. POSIX는 스레드 당 CPU 시간을 측정하는 방법을 지정합니다. 핫스팟/SRC에서

핫스팟/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. 

: 다음 Windows : 핫스팟 소스를 통해 검색

, 나는 볼 수있다 /os/linux/vm/os_linux.cpp 나는이 목적을

012에 사용되는 위해 clock_gettime와 함께 pthread_getcpuclockid를 참조 할

핫스팟/src/os/windows/vm/os_windows.cppGetThreadTimes이 사용됩니다.

관련 문제