예상보다 더 많이 잠자는 Sleep() 조사
Windows API의 Sleep() 함수는 스레드 실행을 일시 중단하는 다목적 도구입니다. 그러나 일부 사용자는 함수가 의도한 것보다 오랫동안 절전 모드로 전환되는 예기치 않은 동작을 경험합니다. 이 기사에서는 문제의 일반적인 발생과 잠재적인 원인을 조사하면서 문제를 자세히 살펴볼 것입니다.
동작 및 지속 시간 차이
루프에서 Sleep(1)을 100회 호출하면, 총 수면 시간은 100ms가 아닌 1500ms로 관찰됩니다. 이러한 차이는 실제 수면 시간이 반복당 약 15ms임을 나타냅니다. 이 동작은 시스템마다 다르며 일부 사용자는 일관되게 1ms의 절전 시간을 보고합니다.
가능한 이유
과도한 절전 시간이 반드시 하드웨어 또는 소프트웨어 오작동을 나타내는 것은 아닙니다. . Windows 스레드 스케줄링은 스레드 실행이 바인딩되는 시간 간격인 "시간 퀀텀"을 사용합니다. 0이 아닌 절전 기간의 경우 실제 지연은 가장 가까운 전체 양자로 반올림됩니다.
기본 시간 양자
기본적으로 Windows 7의 시간 양자는 다음과 같습니다. 15.6ms. 이는 Sleep(1)이 실제로 최소 15.6ms 동안 스레드를 일시 중지하여 반복당 15ms 절전 동작이 관찰됨을 의미합니다.
대체 설명
경우에 따라 관찰된 1ms의 절전 기간은 시스템 전체 타이머 해상도를 1ms로 수정한 다른 프로그램이나 프로세스로 인해 발생할 수 있습니다. 이 재정의로 인해 수면 시간이 더 정확해질 수 있습니다.
결론
이 시나리오에서 Sleep() 함수의 동작은 일반적으로 예상됩니다. Windows 스레드 스케줄러의 시간 양자 메커니즘은 절전 기간을 반올림하여 전체 간격을 유지하므로 짧은 기간 동안 절전 시간이 길어집니다. 그러나 수정된 타이머 해상도 설정과 같은 외부 요인도 수면 동작에 영향을 미칠 수 있습니다.
위 내용은 Windows의 Sleep(1)이 때때로 예상보다 오랫동안 잠자기 상태로 유지되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!