thread.sleep의 역할은 무엇입니까:
(1) CPU 경쟁 전략
운영 체제에는 CPU 경쟁 전략이 많이 있는데, Windows 시스템에서는 타임 슬라이스 알고리즘을 사용하는 반면 Windows에서는 선점형 알고리즘을 사용합니다. .
(1).
타임 슬라이스 알고리즘에서는 모든 프로세스가 대기열에 들어갑니다. 운영 체제는 순서대로 각 프로세스에 일정 기간, 즉 프로세스가 실행되도록 허용된 시간을 할당합니다. 타임 슬라이스가 끝날 때 프로세스가 계속 실행 중이면 CPU를 빼앗아 다른 프로세스에 할당합니다. 타임 슬라이스가 끝나기 전에 프로세스가 차단되거나 종료되면 CPU는 즉시 전환됩니다. 스케줄러가 해야 할 일은 준비된 프로세스의 목록을 유지하는 것뿐이며 프로세스가 해당 시간 조각을 모두 사용하면 대기열의 끝으로 이동됩니다.
(2).
선점형 운영 체제는 프로세스가 CPU 시간을 얻으면 CPU 사용을 포기하지 않는 한 CPU를 완전히 점유한다는 의미입니다. 따라서 선점형 운영 체제에서는 운영 체제가 모든 프로세스가 "양호한 특성"을 가지고 있다고 가정하고 적극적으로 CPU를 종료한다는 것을 알 수 있습니다. 선점형 운영 체제에서는 여러 프로세스가 있다고 가정하고 운영 체제는 우선 순위와 기아 시간(CPU를 사용하지 않은 기간)을 기준으로 해당 프로세스의 전체 우선 순위를 계산합니다. 운영 체제는 전체 우선 순위가 가장 높은 프로세스에 CPU를 할당합니다. 프로세스가 실행을 완료하거나 적극적으로 정지되면 운영 체제는 모든 프로세스의 전체 우선순위를 다시 계산한 다음 우선순위가 가장 높은 프로세스를 선택하여 CPU 제어권을 부여합니다.
(2) 위에 따르면 Thread.Sleep()의 기능은 운영 체제에 "앞으로 몇 밀리초 안에 CPU 경쟁에 참여하지 않을 것입니다"라고 알리는 것이라고 결론을 내릴 수 있습니다.
그러면 두 가지가 있습니다. 질문:
(1) .Thread.Sleep(0)의 기능은 무엇입니까?
Thread.Sleep(0)의 기능은 "운영 체제를 트리거하여 CPU 경쟁을 즉시 다시 시작"하는 것입니다. 경쟁의 결과로 현재 스레드가 여전히 CPU 제어권을 획득할 수도 있고, CPU 제어권을 획득하기 위해 다른 스레드로 대체될 수도 있습니다. 이것이 우리가 큰 루프에서 Thread.Sleep(0)을 자주 작성하는 이유입니다. 이는 Paint 스레드와 같은 다른 스레드에 CPU 제어권을 얻을 수 있는 권한을 부여하여 인터페이스가 거기서 멈추지 않도록 하기 때문입니다.
(2) 지금 Thread.Sleep(1000)이 호출된다고 가정하면 이 스레드는 확실히 1초 후에 깨어날까요?
답은: 반드시 그런 것은 아닙니다. 왜냐하면 운영체제에게 다음 1000밀리초 동안 CPU 경쟁에 참여하고 싶지 않다고 말하기 때문입니다. 그런 다음 1000밀리초가 지나면 다른 스레드가 이때 CPU를 사용하고 있을 수 있으므로 운영 체제가 CPU를 할당할 차례가 되더라도 해당 스레드가 중단되거나 종료될 때까지 CPU를 재할당하지 않습니다. 이번에는 현재 스레드가 전체 우선순위가 가장 높은 스레드일 필요는 없으며 CPU는 여전히 다른 스레드에 의해 선점될 수 있습니다.
추천 튜토리얼: "java 튜토리얼"
위 내용은 thread.sleep의 기능은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!