2009-06-29 2 views
4

내부 벤치마킹을 위해 nanoTime을 사용하는 몇 가지 프로세스가 Java에서 있습니다 (동일한 스레드 내에서 정확하기 때문에).두 Java 프로세스 간의 nanoTime의 차이를 정확하게 확인할 수있는 방법이 있습니까?

프로세스가 서로 통신 할 수 있습니다.

스레드 간의 nanoTime의 차이를 확인하는 표준 방법이 있습니까? (예 : NTP?를 모방). 이 작업을 정기적으로 수행해야합니까?

답변

3

javadoc은 많은 경고를 사용하여 nanoTime() 메서드를 한정합니다. 요점은 코드 블록 내에서이를 사용하여 경과 시간을 측정하여 "나노초 정밀도 (nanosecond precision), 그러나 반드시 나노초 정확도가 아닌"것입니다.

어설픈 언어입니다. 아마도 의도적으로 그렇게 생각할 것입니다. 아마도 nanoTime()을 사용하여 만든 두 가지 경과 시간 계산을 비교하지 않아도 좋지 않은 결과가 나올 수 있습니다.

벤치마킹의 경우 루프에서 동일한 코드를 벤치 마크하여 경과 시간을 밀리 초 범위로 가져와 대신 신뢰할 수있는 currentTimeMillis()를 사용할 수 있습니다.

+1

+1 : 'nanoTime()'이 실제로하는 유일한 일은 동일한 스레드에서 두 번의 호출 사이에 걸리는 시간을 측정하는 것입니다. 그래서 * 차이점 만이 당신이 빠져 나올 수있는 의미있는 숫자입니다. 이 메소드가 반환하는 절대 값 *은 유용하지 않습니다 **. –

0

벤치마킹에 사용하지 않는 것이 좋습니다. 한 가지 이유는 실적이 다소 알려지지 않은 것입니다 (예 : 멀티 프로세서 컴퓨터의 Windows에서는 매우 느려질 수 있습니다.

동기화 및 값 자체에 관해서는 Windows에서 서로 다른 프로세서에서도 동기화 된 값을 보장합니다. 또한 윈도우의 증가율은 일정합니다. 이러한 속성이 지원되기 때문에 값을 검색하는 데 많은 비용이 듭니다.

Linux에서는 프로세서간에 동기화가 없으며 CPU 속도가 변경되면 증가율이 달라질 수 있습니다 (예 : 절전으로 인해).

Solaris의 경우 next nanoTime이> last nanoTime 이상임을 보장하는 Linux와 유사합니다.

관련 문제