메소드 ScheduleDexecutorService.scheduleatfixedrate ()가 실시간 실행을 보장하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1513518

문제

매 초마다 시간 임계 작업을 실행하기 때문에 고정 시간 단계에서 작업이 실제로 실행되도록 최선의 방법을 찾기 위해 몇 가지 방법을 비교했습니다. 모든 메소드에 대한 오류의 표준 파생을 계산 한 후 방법을 사용하는 것 같습니다. scheduledExecutorService.scheduleAtFixedRate() 최상의 결과로 이어지지 만 왜 그렇게되는지 전혀 알 수 없습니다.

그 방법이 내부적으로 어떻게 작동하는지 아는 사람이 있습니까? 예를 들어 단순한 것과 비교하여 어떻게 sleep() 참조 작업이 실제로 고정 된 시간 단계에서 실행되는지 확인하십시오.

도움이 되었습니까?

해결책

'정상적인'Java VM은 실행 시간에 대한 실시간 보장을 할 수 없습니다 (그리고 그 결과 예약 시간에 대한 결과). 실제로 실시간 보증이 필요한 경우 실시간 VM을 살펴 봐야합니다. Java Rts. 물론이 경우에도 실시간 OS가 필요합니다.

Thread.sleep ()와 비교할 때 : ScheduledExecutorService.scheduleatfixedrate ()의 장점은 (순진한) thread.sleep ()와 비교하여 예약 된 작업의 실행 시간에 영향을받지 않는다는 것입니다. 이 구현 방법에 대해서는 ScheduledFutureTask.runperiodic ()을 참조하십시오.

다른 팁

OpenJDK7 구현을 볼 수 있습니다. ScheduledThreadpoolexecutor.java 이것은 ScheduleDexecutorService 인터페이스를 구현하는 유일한 클래스입니다.

그러나 내가 아는 한 정확도에 대한 ScheduleDexecutorService에 보장이 있습니다. 따라서 측정 값 이이 사실이 분명하다고 표시하더라도 다른 플랫폼 인 VM 또는 JDK로 전환하는 경우에는 해당되지 않을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top