WinAPI Sleep() 함수 지속 시간의 불일치 이해
1밀리초의 매개변수로 WinAPI Sleep() 함수를 호출하면 스레드가 실제로 훨씬 더 긴 기간(일반적으로 약 15밀리초) 동안 일시 중지되는 것으로 관찰되었습니다. 이 현상은 잠재적인 시스템 문제에 대한 우려를 불러일으킵니다.
Windows의 시간 양자화
Windows는 스레드 예약을 위해 시간 양자화 메커니즘을 사용합니다. 이는 시스템이 퀀텀이라고 알려진 개별 간격으로 스레드를 예약한다는 의미입니다. 이러한 간격의 정확한 기간은 Windows 버전 및 에디션을 포함한 여러 요인에 따라 다릅니다. 평균적으로 Windows 7은 약 15.6밀리초의 시간 할당량으로 작동합니다.
Sleep() 기간에 미치는 영향
시간 양자화의 결과로 0이 아닌 모든 Sleep()에 제공된 지연 인수는 가장 가까운 퀀텀으로 반올림됩니다. 이는 Sleep(1) 호출이 실제로 1밀리초에 가장 가까운 시간 할당량인 15밀리초 동안 스레드를 일시 중지하는 이유를 설명합니다.
확인
이 동작을 확인하려면 , 제공된 코드 조각을 실행할 수 있습니다. 코드를 실행하면 시스템의 타이머 확인 설정에 따라 다른 결과가 나올 수 있습니다. 시스템 전체 타이머 해상도를 수동으로 1밀리초로 설정한 경우 절전 시간이 더 짧아질 수 있습니다. 그러나 기본적으로 Windows 7은 15.6밀리초의 타이머 해상도를 사용하므로 관찰된 절전 시간이 길어집니다.
결론
Sleep() 함수의 불일치 지속 시간은 Windows 스레드 스케줄러의 고유한 시간 양자화 메커니즘에 기인합니다. 이렇게 반올림하면 스레드 예약이 효율적이고 예측 가능하게 수행되어 잠재적인 스레드 예약 충돌을 방지할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3