프로세스 우선 순위를 지정하면 속도가 향상되지 않는 이유는 무엇입니까?


18

많은 시스템 리소스를 사용하는 두 개의 응용 프로그램이 있습니다. 작업 관리자에서 하나의 우선 순위를 낮추고 다른 하나를 늘리면 우선 순위가 높은 응용 프로그램의 속도가 크게 향상되지 않습니다.

왜 이런거야? 해야 할 일이 더 있거나 더 필요한가?


6
실생활과 같습니다. 다른 승객보다 비행기를 타는 것이 우선 순위가 높다고해서 비행 시간이 줄어드는 것은 아닙니다!
Mehrdad

답변:


28

병목 현상이 CPU 자체 인 경우 우선 순위는 도움이되지 않습니다. 대부분의 시스템에는 모든 프로세스를 연속적으로 실행할 프로세서가 충분하지 않기 때문에 운영 체제가 다음에 실행할 프로세스를 결정하기 위해 사용 하는 스케줄링 알고리즘에 실제로 우선 순위 가 있습니다.

우선 순위가 높은 작업은 대기열의 맨 위로 빠르게 이동하므로 일반적인 대기 시간에 도움이되지만 프로세스가 전체 시간 조각을 소진하는 경우 실제 계산에 할당 된 경우 일정이 변경되지 않습니다. 우선 순위를 변경하는 것은 I / O를 기다리는 프로세스가 있고보다 빠른 응답을 원할 때 더 유용합니다.


5
병목 현상이 실행 가능한 스레드가 너무 많은 경우 우선 순위가 도움이됩니다. 시간 분할이 끝날 때 실행 가능한 상태로 유지되는 Windows의 우선 순위가 높은 스레드는 우선 순위가 낮은 스레드보다 우선 순위가 높은 다른 스레드를 실행할 수 있습니다 (Windows는 우선 순위가 낮은 스레드를 굶어 버리지 않고 때로는 부스트합니다). 우선 순위는 I / O를 기다리는 스레드에 거의 영향을 미치지 않습니다. 대기중인 I / O 유형에 따라 I / O가 완료된 후 Windows는 스레드의 우선 순위를 일시적으로 향상시킵니다.
Mike Dimmick

4

우선 순위는 CPU 시간입니다. 모든 코어가 항상 100 % 활용됩니까? 그렇지 않으면 우선 순위는 영향을 미치지 않습니다. 종종 CPU는 병목 현상이 아니며 메모리, 디스크 또는 GPU 리소스입니다.


3

우선 순위는 사용 가능한 CPU 코어보다 실행 가능한 스레드가 더 많은 경우에만 중요합니다. 이 경우 우선 순위는 어떤 스레드를 실행할지 제어합니다. 대부분의 시스템에서 CPU의 경합에 대해 충분한 계산이 이루어지지 않습니다. 스레드가 모두 차단 되어 어떤 일이 발생하기를 기다립니다. 무언가를 입력하거나, 마우스를 움직이거나, 화면을 터치하거나, ​​디스크, 네트워크, 연결 한 다른 장치 또는 중요한 스레드에 대한 작업을 마치기 위해 다른 스레드에서 데이터가 도착하기를 기다리는 것일 수 있습니다. 구조. 프로그램의 일부를 디스크에서 읽거나 파일을 명시 적으로 읽는 대신 다시 읽기 위해 스왑 된 일부 메모리에서 대기 중일 수 있습니다.

Windows에서 스케줄러 는 각 우선 순위 레벨에서 실행 가능한 스레드 큐를 유지 합니다. 스레드가 퀀텀 을 소진했거나 (다른 것을 실행하기 전에 허용 된 시간) 스레드를 예약해야하거나 스레드가 차단되어 더 이상 실행할 수 없거나 더 높은 우선 순위 를 갖도록 스케줄링 결정을 내릴 때 스레드가 차단 해제되었습니다. 실행 가능한 스레드가있는 우선 순위가 가장 높은 큐의 다음 스레드가 스케줄됩니다. 실행중인 스레드가 양자를 모두 사용한 경우 큐의 끝에 놓입니다. 우선 순위 수준에서 실행 가능한 유일한 스레드이고 우선 순위가 높은 다른 실행 가능한 스레드는 없지만 실행되지 않는 스레드가 있으면 다른 방향으로 전환됩니다.

멀티 코어 / 멀티 프로세서 시스템에서는 스레드가 실행될 수있는 코어에 제한이있을 수 있습니다. 또한 시스템 은 스레드의 데이터가 해당 코어의 캐시에있을 가능성이 높고 작성된 데이터에 빠르게 액세스 할 수 있도록 이상적인 코어 및 NUMA 노드 내에 스레드를 유지하려고합니다 . 다음에 실행할 항목을 선택하지 않으면 스레드가 비 이상적인 코어에서 계속 실행됩니다.

이 시스템은 다양한 동적 우선 순위 부스트 및 동적 양자 크기를 사용하여 포 그라운드 애플리케이션이 백그라운드 프로세스보다 더 많은 시간 (필요한 경우)을 얻고 I / O 작업이 완료 될 때 (마우스, 키보드 및 터치 스크린 입력). 또한 우선 순위 강화는 우선 순위가 높은 스레드가 현재 보유하고있는 리소스를 기다리는 우선 순위 반전을 방지하는 데 사용됩니다. 중간 우선 순위 스레드도 실행중인 경우 우선 순위가 낮은 프로세서 시간이 부족하여 우선 순위가 높은 스레드를 유지합니다. 따라서 우선 순위가 낮은 스레드가 일시적으로 우선 순위가 높아 지므로 시간이 걸리고 우선 순위가 높은 스레드에 필요한 리소스가 해제됩니다.

Windows Vista 이전에는 스레드 우선 순위가 I / O 작업 완료 속도에 영향미치지 않았습니다. Windows Vista부터 I / O도 우선 순위를 가질 수 있으며 기본적으로 스레드 우선 순위에서 비롯됩니다.

요약 : CPU가 많이로드되지 않으면 스레드 우선 순위를 변경해도 아무런 영향을 미치지 않으며, 그 영향도 일반적으로 최소화됩니다. 프로세스가 I / O를 기다려야하거나 CPU 시간 동안 다른 프로세스와 충돌하지 않는 경우 이미 가장 빠른 속도로 실행 중이며 우선 순위를 변경해도 더 빠르지는 않습니다.


0

일반적으로 프로그램이 멀티 스레딩을 추가하여 둘 이상의 CPU를 사용하도록하려면 추가 노력이 필요합니다. 따라서 프로그램의 사용 가능한 우선 순위가 가장 높더라도 하나의 코어 만 사용하고있을 수 있습니다.

다른 가능한 문제 :

  • 프로그램이 비효율적이거나 잘못 작성 될 수 있습니다
  • "느린"디스크 액세스 또는 느린 네트워크로 인해 속도가 느려질 수 있습니다.

0

I / O 바운드 프로세스의 I / O 우선 순위를 높이더라도 프로세스가 더 빨리 실행되는 것은 아닙니다. 예를 들어, 별도의 원격 프로세스에 의해 생성 된 데이터 소비자이고 해당 소스가 데이터를 생성하는 속도를 따라가는 경우 더 빠르거나 더 높은 처리량을 가질 수 없습니다.

Mike Dimmick의 답변에서 설명한 것처럼 현재 허용되는 답변의 첫 번째 문장 ( /superuser//a/752587/322588 ) 에서 명시 적으로 언급 한 내용과 달리 우선 순위 변경은 CPU가 병목 현상 일 때 가장 효과적입니다. ( /superuser//a/752864/322588 ). 또한 수락 된 답변의 두 번째 단락의 "프로세스가 전체 시간 조각을 소진하면 실제 계산에 할당 된 경우 예약이 변경되지 않습니다"라는 문장은 프로세스가 일반적으로 모든 우선 순위가 가장 높지 않은 한 완전히 잘못되었습니다 실행될 때마다 실행 가능한 스레드. 다른 모든 상황에서 우선 순위를 높이면 벽시계 간격 당 더 많은 시간이 걸리기 때문입니다.

Mike Dimmick은 며칠 전에이 답변의 문제점을 지적하고 훨씬 더 나은 답변을 제공했지만 첫 번째로 설명 할 수없는 투표를 계속하고 있습니다. 저자가 단지 우리에게 인형에 대한 그의 답을 바보라고 주장하는 것은 그것이 CPU 바운드 프로세스와 관련하여 단순히 단순하거나 단순하지도 않기 때문에 헛된 것이 아니기 때문에 그럴듯하지 않다.

면책 조항 : Dimmick 씨는 모르지만 자신이 무엇을 쓰고 있는지 알 수 있습니다.


아마도 당신은 오해했을 것입니다. 문제는 더 빠른 프로세스 실행 에 관한 것이 었습니다 . CPU 바운드 프로세스는 전체 스케줄링 단위 (양자)를 모두 사용한 다음 마지막에 준비된 프로세스 대기열로 이동합니다. Windows와 같은 데스크톱 운영 체제에서는 프로세스가 1 / quantum-Hz의 기회가 1 초마다 실행될 수 있음을 의미합니다. 우선 순위를 변경해도 (일반적으로) 타임 슬라이스의 길이는 변경되지 않습니다. 완료하는 데 항상 같은 수의 스케줄링 퀀텀이 필요합니다. 결정적 으로 이것은 Windows가 실제로 프로세스 런타임을 측정하는 방법입니다. 예약 된 퀀텀 수입니다.
Andon M. Coleman

프로세스가 더 빨리 완료 될 수 있지만 여전히 동일한 수의 스케줄링 단위에 대해 실행 되었습니다. I / O 바운드 프로세스가 대기 목록에 놓이면 I / O 조작이 완료되면 퀀텀이 만료되기 전에 우선 순위가 낮은 실행중인 프로세스를 실행하고 선점 할 수있는 두 번째 기회가 발생할 수 있습니다. CPU 바인딩 프로세스에는이 자유가 없으며 전체 시간 조각을 모두 사용한 다음 준비 대기열로 이동합니다. 그것은 이다 그들이 충분히 높은 우선 순위가있는 경우 그 즉시 나중에 실행 가능하지만 Windows가 실행 시간을 측정하는 방법과는 아무 상관이 없습니다.
Andon M. Coleman

대기중인 I / O 바운드 프로세스의 우선 순위는 기본적으로 다르며 Windows에서보고 된 런타임에 상당한 영향을 줄 수 있습니다. 다시 말하지만, Windows는 런타임이 만료 된 퀀텀 수로 측정합니다 (프로세스가 실제로 실행중인 10ms 퀀텀 중 1ms를 소비 한 후 자발적으로 I / O를 위해 남은 9ms를 대기하는 경우에도 Windows 커널은 10ms 가치로 계산합니다) 사용자 모드 런타임). 선점은 I / O 바운드 응용 프로그램을 완료하는 데 적은 양의 쿼터가 필요하도록 도와줍니다. 다른 커널 (예 : Linux)은 프로세스 런타임에서 부분 쿼터를 정확하게 측정 할 수 있지만 Windows는 그렇지 않습니다.
Andon M. Coleman

@ AndonM.Coleman Vista 이후, 가능합니다.
Jamie Hanrahan

@JamieHanrahan : 글쎄, 당신은 항상 timeBeginPeriod (...)인터랙티브 한 모든 것을하는을 호출 할 수 있습니다 . 게임은 일반적으로 시작될 때 이것을 1로 설정 하며, 보드에서 1ms의 예약 간격을 시스템에서 실행되는 모든 것에 적용합니다. 그것을 한 프로세스에만 국한되지 않습니다. 멀티 태스킹을 위해 Windows를 진지하게 받아들이지 않는 이유 중 하나입니다.
Andon M. Coleman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.