Windows 10 운영 체제를 언급하고 있지만 대답은 OS 독립적일 수 있다고 생각합니다.
Windows에서는 실시간 우선순위 수준이 가장 높은 우선순위 수준이며, 예를 들어 키보드 및 마우스 입력을 처리하는 데 사용됩니다.
내가 온라인에서 읽은 것에서 :
CPU 집약적인 프로세스를 실시간으로 설정하면 OS가 이러한 입력을 처리하는 데 충분한 CPU 시간을 확보하지 못하기 때문에 키보드와 마우스가 응답하지 않게 됩니다.
기본적으로 실시간 우선순위로 설정된 프로세스는 작업 관리자가 아닌 다른 프로세스에 CPU를 제공하지 않고 실행됩니다. 뭔가 잘못되면 막을 수 없습니다.
예를 들어 다음 Microsoft 게시물을 참조하세요.CPU 100% 프로그램을 실시간 우선순위로 설정하면 원하는 결과를 얻을 수 있습니다..
질문:
그래서 이 모든 것이 내 컴퓨터에서 이 우선 순위 수준을 테스트하는 것을 두려워하게 만듭니다. 이것이 바로 내가 직접 시도하는 대신 이 질문을 하는 이유입니다. 또한 이론적 답변은 장난감 스크립트를 사용하는 것보다 미래에 대한 증거로 보입니다.
실시간 우선순위로 단일 스레드 프로세스를 실행하면 완료될 때까지 멈추지 않고 실행된다는 것을 이해합니다. 하지만 두 번째 코어가 있는 경우 이 두 번째 코어 덕분에 이 프로세스가 실행되는 동안 내 PC를 사용할 수 있습니까?
그렇다면 이는 실제적인 적용이 가능합니다.한 코어에서 최대한 빨리 결과가 필요한 계산 작업을 실행하는 동시에 다른 코어에서는 여전히 PC를 사용할 수 있습니다.
답변1
실시간 우선순위로 단일 스레드 프로세스를 실행하면 완료될 때까지 멈추지 않고 실행된다는 것을 이해합니다.
그것은 과장된 것입니다. 이를 사실이 아닌 것으로 만드는 몇 가지 사항이 있습니다.
작업 관리자에서 "실시간 우선순위"로 표시되는 것은 실제로 프로세스 스레드가 액세스할 수 있는 우선순위 범위입니다. 하나의 "실시간" 프로세스 스레드가 다른 "실시간" 프로세스의 스레드보다 더 높은 우선순위를 가질 수 있습니다. 내 답변 보기여기. 그러나 "실시간" 클래스 내의 모든 우선순위는 다른 모든 클래스의 우선순위보다 높습니다.
대부분의 스레드는 CPU에서 모든 코드 회전을 소비하지 않으므로 우선 순위에 관계없이 CPU를 100% 사용하지 않습니다. 대부분의 스레드에는 가끔씩 무언가를 기다릴 기회가 있습니다. 일반적으로 I/O가 완료되거나 하드 페이지 오류가 해결되거나 다른 스레드가 더 이상 기다릴 필요가 없음을 나타낼 때까지 기다리고 있습니다. (다른 스레드는 동일한 프로세스에 있을 수도 있고 다른 프로세스에 있을 수도 있습니다.)
하드웨어 장치의 인터럽트(실시간 클럭의 인터럽트 포함) 처리의 첫 번째 단계는 다음과 관계없이 발생합니다.어느스레드 기반 코드. 우선순위는 스레드의 속성이지만 인터럽트는 스레드에 의해 처리되지 않으므로 이 항목에는 "우선순위"가 없습니다. 스레드 기반 코드의 우선순위에 관계없이 스레드 기반 코드보다 우선합니다. Windows 10 작업 관리자의 세부 정보 탭에서 이 항목에 사용된 시간을 "시스템 중단"으로 확인할 수 있습니다.
실시간 우선순위 클래스는 다음과 같은 점에서 다른 우선순위 클래스와 다릅니다.
물론 다른 모든 우선순위 클래스보다 우선순위가 높습니다.
이 클래스의 프로세스 스레드는 기본적으로 다른 클래스의 프로세스 스레드처럼 최근 활동에 따라 우선순위가 자동으로 조정되지 않습니다. (스레드 우선순위 조정은 프로그래밍 방식으로 끄고 켤 수 있지만 기본적으로 비실시간 프로세스에서는 켜져 있습니다.)
하지만 두 번째 코어가 있는 경우 이 두 번째 코어 덕분에 이 프로세스가 실행되는 동안 내 PC를 사용할 수 있습니까?
아마. 실제로 하이퍼스레딩이 활성화된 코어가 하나만 있는 경우에도 마찬가지입니다.
실시간 우선순위 클래스를 적절하게 사용하는 것은 CPU 집약적인 프로세스에는 적합하지 않습니다. 오히려 이벤트에 신속하게 대응해야 하는 작업에는 높은 우선순위를 사용합니다. 이러한 이벤트에 대한 응답으로 집중적인 CPU 기반 작업은 대화형 사용자를 방해하지 않도록 낮은 우선순위, 이상적으로는 "정상"보다 낮은 우선순위에서 수행되어야 합니다.
답변2
기본적으로 실시간은 매우 높은 우선순위를 가지며 필요한 경우가 아니면 수행해서는 안 됩니다. 이는 사용 가능한 모든 리소스를 사용하는 프로세스를 강화하려고 하면 기본 프로세스(키보드 및 마우스에 대해 언급한 대로)도 영향을 받기 때문입니다. 이로 인해 탐욕스러운 프로세스를 중지하기가 어려워질 수 있습니다.
이상적으로는 우선순위보다는 코어를 할당하는 방법을 사용해야 합니다. 우선순위는 전체 CPU에 영향을 미칩니다. 예를 들어 VBox를 사용하는 경우 스레드 수를 높게 설정하는 것이 우선 순위를 설정하는 것보다 멀티 태스킹과 동시에 사용하는 데 훨씬 더 효과적입니다.
TL;DR CPU 집약적인 작업으로 멀티태스킹하는 경우 작업에 코어를 할당하고 우선순위를 실시간으로 재정의하지 마세요. 필요한 경우 가상화를 사용하여 리소스를 분할하는 것이 도움이 될 수 있습니다.