우선 순위는 작업 관리자에서 어떻게 작동하며 언제 설정하지 않아야합니까?


30

실제로 어떤 일이 발생하는지 확인하기 위해 일부 프로세스 우선 순위를 설정했지만, 무엇을 추측해야합니까 ... 아무것도; 그것은 모두 같은 방식으로 실행됩니다 ...

Google에서 우선 순위가 실제로 처리 속도와 관련이 없다는 것을 알았습니다. 맞습니까? 그럼 왜 안돼? 프로세스의 우선 순위가 가장 높으면 더 빨라지지 않아야합니까 ??


4
짧은 대답 : When should I set [priorities in Task Manager]? 거의 없습니다.
Dan Henderson

2
이해해야 할 또 다른 중요한 사항은 우선 순위를 적용하면 시스템이 수행 할 수있는 총 작업량이 줄어든다는 것입니다. 이것이 일반적인 데스크톱 운영 체제가 실시간 운영 체제가 아닌 이유입니다. 또한 실시간 운영 체제처럼 동작할수록 효율성이 떨어집니다. 예를 들어 중단은 캐시를 날려 버립니다. 우선 순위가 낮은 작업은 여전히 ​​수행해야하며 여전히 I / O를 위해 경쟁합니다. 더 작은 청크에서 덜 효율적으로 수행하는 것은 누구에게도 도움이되지 않습니다.
David Schwartz

컴퓨터를 생각하지 마십시오. 당신은 이길 수 없습니다. 스레드보다 스레드를 훨씬 잘 처리하는 방법을 알고 있습니다.
b1nary.atr0phy

답변:


52

식료품 점에 대한 "라인 헤드로 이동"카드가 있다고 가정하십시오. 상점에 가서 장바구니를 채우고 계산대로 가서 줄에 아무도 없습니다. 카드가 더 빨리 체크 아웃되도록 도와 줍니까? 아니.

우선 순위가 높은 프로세스는 더 빨리 실행되지 않거나 더 많은 CPU 시간을 사용하지 않기 때문에 처리 속도에 영향을 미치지 않습니다 .

실제로 이것에 대해 이야기하려면 스레드를 언급해야합니다. 프로세스는 Windows에서 "실행"되지 않습니다. 프로세스의 일부인 스레드가 실행됩니다. (프로세스에 하나의 스레드 만있는 경우에도 구별은 외부에서 매우 희미합니다.)

(방법 : CPU가 "4 개의 코어와 8 개의 스레드"와 같은 마케팅 용어로 오해의 소지가 있습니다. CPU에는 코어가 있지만 CPU에는 스레드가 "있지 않습니다"스레드는 프로세스의 일부입니다. 하이퍼 스레딩을 사용하지 않으면 하나의 스레드 를 실행할있고 , 하이퍼 스레딩을 사용하면 코어 두 개의 스레드를 실행할 수 있지만 CPU에는 스레드가 "있지 않습니다".

각 스레드는 항상 여러 스케줄링 상태 중 하나에 있습니다. 가장 일반적으로 볼 수있는 상태는 다음과 같습니다. 대기 중 (* nix는 이것을 "차단됨"이라고 부릅니다. 두 OS 모두에서 이것은 I / O 또는 이와 유사한 대기를 의미하며 CPU 시간을 사용하지 않으며 원하지 않습니다). 준비 (CPU 시간을 사용하고 싶지만 현재 CPU를 사용할 수 없음); 그리고 달리기 . 실행중인 스레드 만 CPU 시간을 소비합니다. 즉, 프로세스에 실행중인 스레드가없는 경우 작업 관리자와 같은 도구에서 CPU 시간이 0 % 인 것으로 나타납니다.

스레드는 한 번에 하나의 코어 (또는 하이퍼 스레딩이 활성화 된 경우 "논리 프로세서")에서만 실행될 수 있으므로 프로세스는 현재 실행하려는 스레드가있는만큼 많은 CPU 코어 (또는 LP) 만 사용할 수 있습니다. . (시스템 전체에 대해 동일한 진술을 할 수 있습니다.)

대부분의 시스템에서 대부분의 스레드는 대부분의 시간을 대기 상태로 보냅니다. (이것은 시스템이 아무것도하지 않을 때 유휴 프로세스가 CPU 시간의 95 % 이상을 차지해야하는 이유입니다.) 비디오 나 3D 렌더링, 게임 등과 같은 것들의 "작동하는"스레드는 예외입니다. 일반적으로 어딘가에서 읽어야하는 일부 입력 데이터에 대해 작업해야하고 일반적으로 어딘가에 써야하는 출력 데이터를 생성하기 때문에 CPU의 100 %를 실제로 사용할 수 있습니다. 또한 시간이 지남에 따라 메모리의 많은 다른 데이터를 참조 할 수 있습니다. 이는 하드 페이지 결함이 해결 될 때까지 기다려야 할 수도 있습니다.

그러나 비디오 렌더링 또는 3D 이미지 렌더링과 같은 작업을 수행하는 스레드는 거의 모든 시간을 CPU에서 "컴퓨팅"하고 I / O를 거의 기다리지 않을 수 있습니다. 이러한 스레드는 종종 "컴퓨 트 바운드"라고하며 전체 성능이 주로 CPU 속도에 의해 제한됨을 의미합니다.

작업 관리자에서 설정하면 실제로 프로세스의 모든 스레드에 대한 "기본 우선 순위"가 설정됩니다. 스레드의 실제 또는 "현재"우선 순위는 더 높을 수 있지만 기본보다 낮을 수는 없습니다. 잠시 후에 그것에 대해 더 자세히 설명합니다. 스케줄링 결정 ( "누가 실행하고 어떤 CPU에서")은 항상 스레드의 현재 우선 순위를 사용하여 수행됩니다. 우선 순위는 준비 및 실행 스레드에만 의미가 있습니다 (또는 다른 방법으로 우선 순위 대기 스레드에 의미 가 없습니다 ).

Windows는 선점 예약 알고리즘을 사용합니다 . 시스템에서 하나의 스레드 만 CPU 시간을 사용하려는 경우 우선 순위가 가장 작은 것은 중요하지 않습니다. CPU의 100 %를 얻습니다. 우선 순위가 높은 스레드가 실행될 때 스케줄러가 CPU 기능의 일부를 "보류"하는 것만은 아닙니다.

두 개의 스레드가 CPU를 사용하기를 원하고 동일한 우선 순위 인 경우 "시간 분할"을 통해 일정이 설정되고 시간이 지남에 따라 각각 CPU 시간의 약 50 %를 얻습니다. 우선 순위가 다른 경우 우선 순위가 높은 스레드는 100 %가되고 더 낮은 스레드는 아무것도 얻지 못합니다 .

(실제로는 4 ~ 5 초마다 수십 msec 정도를주기 때문에 주기적으로 "기아 회피 우선 순위 부스트"를 경험할 것이기 때문에 아무것도 얻지 못합니다. 그러나 이것이 실제로 "높은 우선 순위"에 대한 예외는 아닙니다. 굶주린 실의 우선 순위를 조정하여 수행되기 때문에 승리합니다.)

CPU 코어가 두 개 이상인 경우 상황이 더 흥미로워지고 일반적으로 우선 순위가 영향 을 받습니다. 실행하려는 두 개의 스레드가 있다고 가정하십시오. 그리고 스레드보다 우선 순위가 같거나 높은 것을 수행하지 않는 CPU 코어가 두 개 이상 있다고 가정합니다. 그런 다음 두 스레드는 각각의 우선 순위에 관계없이 각각 코어의 100 %를 얻습니다 .

(두 사람이 슈퍼마켓에 나타나고 두 명의 체커가 무료입니다. 고객 중 한 명은 "라인으로 이동"카드를 가지고 있습니다. 중요하지 않습니다.)

tl; dr 버전 (지금까지) : 우선 순위는 "누가 CPU 시간의 비율을 얻는 지"가 아니라 "누가 먼저 실행하는지"에 관한 것입니다.

Windows가 HT가 꺼져있는 경우 코어를 처리하는 것과 거의 같은 방식으로 코어에서 두 개의 "논리 프로세서"를 처리한다는 점을 제외하고는 하이퍼 스레딩에 대해서는 다루지 않겠습니다. 즉, "실제"CPU로 취급됩니다. 단,이 경우 Windows는 한 번에 하나 이상의 LP를 코어에 사용하지 않습니다. 즉, 코어 이상의 스레드가 동시에 실행하려고 할 때까지 일반적으로 코어에서 두 LP를 모두 사용하기 시작하지 않습니다 . 두 개의 "논리 프로세서"는 단일 비하이 퍼스 코어의 성능의 두 배와 같은 성능을 제공하지 않기 때문입니다.

"기본 우선 순위"정보 : Windows는 최근에 수행 한 작업을 기반으로 스레드의 현재 우선 순위를 조정합니다 ( "부스트"및 "부패"). 최근에 I / O 작업을 완료 한 스레드는 일반적으로베이스 위의 노치입니다. UI 스레드 (윈도우를 실행하는 스레드)는 종종 상당히 높습니다. CPU 바운드 스레드는 일반적으로 기본입니다. 이것의 목적은 프로그램 UI에서 응답 성을 유지하고 IO 요청이 디스크와 같은 것들로 계속 흐르도록하는 것입니다.

프로그램 (프로세스)은 프로세스의 우선 순위 (작업 관리자에서 설정 한 것)에 의해 결정된 범위 내에서 각 스레드의 기본 우선 순위를 변경할 수도 있습니다. 그러나 대부분의 프로그램은 귀찮게하지 않습니다. (더 많은 것이 좋습니다.)

다른 일이 있습니다. 우선 순위 부스트 / 부패와 요즘 멀티 프로세싱 시스템 (멀티 코어 또는 하이퍼 스레딩 또는 둘 다)이 너무 일반적이고 Windows에서 항상 백그라운드에서 실행중인 항목이 있기 때문에 (하지만 CPU 시간을 많이 사용하지 않기를 바랍니다), 하드 및 소프트 "친 화성"효과로 인해 테스트 사례를 실행하고 여기에서 예측되는 정확한 결과를 얻는 것이 어렵습니다. 그러나 이것은 올바른 그림에 가깝게 만들어야합니다.

결론적으로...

대부분의 것을 "정상"으로 두는 것이 합리적입니다. 그렇지 않으면 OS의 디스크 캐시 플러시 기능과 같이 실제로 작동하고 싶은 것을 굶주리게 될 수 있습니다. 실제로, 많은 OS 프로세스는 Normal 이외의 프로세스가 될 것이며, Windows가 배치하는 모든 곳에 두어야합니다.

우선 순위를 조정하기 위해 작업 관리자를 사용하는 합리적인 경우는 비디오 또는 3D 렌더링과 같은 CPU 호깅 작업이 있고 시스템이 실행되는 동안 시스템 사용이 느려지는 경우입니다. 올바른 것은 믿거 나 말거나 우선 순위를 한두 단계 정도 낮추는 것입니다. 다른 모든 CPU 사이클을 행복하게 사용하지만 대화식으로 시스템을 사용하지 않아도됩니다. 작업을 완료하는 데 시간이 조금 더 걸릴 수 있지만 다른 프로그램의 대화식 사용에 대한 간섭을 최소화하면서 작업을 완료 할 수 있습니다. 그 트레이드 오프가 마음에 들지 않으면하지 마십시오! 그러나 "빠르게 만들기"시도에서 우선 순위를 높게 설정하면 UI가 끝날 때까지 전체 UI가 중단 될 수 있습니다.

소위 실시간 우선 순위 클래스로 설정하지 마십시오.

(편집-이 단락이 추가되었습니다) 좋습니다. 이것은 극단적 인 진술입니다. ( "이것을 제외하고는 보편적 주장은 사실이 아니다.") 적어도 신중하게 고려하지 않고서는 말이다. 목표를 빠르게 달성하는 것이 목표라면 도움이되지 않을 것입니다. 그러나 시스템을 "하드 록"할 수 있습니다 (재설정이 필요하거나 대부분의 최신 컴퓨터에서는 전원을 껐다 켜야합니다). 또는 무응답 상태가되어 하드락 상태가 될 수도 있습니다.

nb : 모든 비디오 플레이어 앱은 Vista 이상의 "멀티미디어 클래스 예약"기능을 선택해야합니다. 이렇게하면 비교적 짧은 간격으로 CPU의 최대 80 %가 자동으로 제공됩니다. 당신이 그 결함없이 결함 재생을 얻을 수 없다면 뭔가 잘못입니다.

자세한 내용은 Solomon, Russinovich 및 Ionescu의 Windows Internals 6th Edition의 스레드 및 예약에 관한 장을 참조하십시오 .

프로세스 및 스레드 우선 순위 설정 방법 및 작업 관리자의 "우선 순위"열의 의미에 대한 정보는 여기 내 답변을 참조하십시오 .


1
그건 그렇고, 다음과 같은 질문에 대한 나의 대답은 관련이 있습니다 : superuser.com/questions/949030/…
Jamie Hanrahan

1
또한 "스케줄링", "스케줄러"등은 어떤 스레드를 실행할지, 어떤 CPU를 실행할지를 결정하는 Windows 커널 루틴을 말합니다. 특정 시간에 프로세스를 시작하거나 다양한 트리거에 응답하는 "작업 예약"이 아닙니다.
Jamie Hanrahan

확인 I @JamieHanrahan 여기 이동 : superuser.com/questions/1380473/...
Julien__

5

우선 순위를 변경하면 운영 체제가 실행중인 응용 프로그램에 CPU 시간을 할당하는 방식이 변경됩니다. 전체 CPU 사용률이 높은 경우에만 눈에 띄는 효과가 나타납니다.

예를 들어 비디오를 인코딩하고 동시에 다른 비디오를 볼 수 있습니다. 또한 인코딩 응용 프로그램은 모든 CPU 코어에서 100 % 컴퓨팅 성능을 사용합니다. 결과적으로 다른 응용 프로그램이 끊길 수 있습니다.

Windows는 기본적으로 두 응용 프로그램에 동일한 "일반"우선 순위를 부여합니다. 이 시점에서 영화 플레이어 소프트웨어의 우선 순위를 높이고 싶을 수 있습니다. 이렇게하면 인코딩 소프트웨어가 비디오 플레이어와 비교하여 백그라운드 프로세스로 저하되기 때문에 비디오 인코딩 속도가 느려져서 비디오를 부드럽게 재생할 수 있습니다.


"마찬가지로, 인코딩 응용 프로그램은 모든 CPU 코어에서 100 % 컴퓨팅 성능을 활용할 것입니다." 적어도 코어 수 인코딩 스레드 가있는 경우에만 가능 합니다.
Jamie Hanrahan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.