당신이 말했듯이, H사용자 스레드를 보여주기 위해 칠 수 있습니다 .
다만 향후의 참조를 위해 (그리고 재미)의 계산 CPU 사용률을하자!
약간의 배경 :
최신 운영 체제에는 스케줄러가 있습니다. 모든 프로세스와 해당 스레드가 컴퓨팅 시간을 공평하게 공유하는 것을 목표로합니다. 나는 너무 많은 일정에 들어 가지 않을 것입니다 (정말 복잡합니다). 그러나 결국에는 실행 큐라 는 것이 있습니다. 이것은 모든 프로세스의 모든 명령이 차례가 실행될 때까지 대기하는 곳입니다.
모든 프로세스는 실행 대기열에 "태스크"를두고 프로세서가 준비되면 프로세스를 시작하여 실행합니다. 예를 들어 프로그램이 휴면 상태가되면 실행 대기열에서 자신을 제거하고 다시 실행할 준비가되면 "줄 끝"으로 돌아갑니다.
이 큐에 정렬하면 공정 '과 관련이있다 우선 순위 (또한 "좋은 값"이라고 - 즉 프로세스가 좋은 시스템 리소스에 대한).
큐 길이에 따라 시스템 로드 가 결정 됩니다. 예를 들어 2.5의로드는 CPU가 실시간으로 처리 할 수있는 모든 명령에 대해 2.5 개의 명령이 있음을 의미합니다 .
Linux에서는이로드가 10ms 간격 (기본적으로)으로 계산됩니다.
이제 CPU 사용률의 백분율 값으로 :
두 개의 시계가 있다고 가정합니다. 하나는 호출 t
되고 실시간 을 나타냅니다 . 매 초마다 1 초를 측정합니다. 우리가 부르는 다른 시계 c
. 처리가있는 경우에만 실행됩니다. 즉, 프로세스가 무언가를 계산할 때만 클럭이 실행됩니다. 이것을 CPU 시간이라고도합니다. 시스템의 모든 프로세스는 그 중 하나를 '가져 왔습니다'.
이제 단일 프로세스에 대한 프로세서 사용률을 계산할 수 있습니다.
또는 모든 프로세스에 대해 :
멀티 코어 머신에서는 CPU가 완벽하게 활용되면 초당 4 초 분량의 계산을 계산할 수 있기 때문에 물론 3.9의 값이 될 수 있습니다.
Wikipedia는 다음 예제를 제공합니다.
6-CPU UNIX 시스템에서 실행되는 소프트웨어 응용 프로그램은 사용자 요구 사항을 충족시키기 위해 세 가지 UNIX 프로세스를 만듭니다. 이 세 가지 프로세스는 각각 두 개의 스레드를 만듭니다. 소프트웨어 응용 프로그램 작업은 응용 프로그램에 대해 생성 된 6 개의 독립적 인 실행 스레드에 균등하게 분배됩니다. 리소스 대기 시간이 없으면 총 CPU 시간은 실시간으로 6 배가됩니다.
이 작업을 수행하는 작은 파이썬 스 니펫이 있습니다.
>>> import time
>>> t = time.time()
>>> c = time.clock()
>>> # the next line will take a while to compute
>>> tuple(tuple(i**0.2 for i in range(600)) for i in range(6000))
>>> print (time.clock() / (time.time() - t)) * 100, "%"
66.9384021612 %
완벽한 세계에서는 시스템 부하가 100-66.93 = 33,1 %라는 것을 알 수 있습니다. (그러나 실제로는 I / O 대기, 비 효율성 스케줄링 등과 같은 복잡한 문제로 인해 잘못된 것입니다)
load 와 달리 , 이러한 계산은 항상 0과 프로세서 수 사이의 값, 즉 0과 1 또는 0과 100 % 사이의 값이됩니다. 이제 100 % CPU를 사용하는 3 가지 작업을 실행하는 시스템과 100 만 작업을 수행하는 작업을 100 만 CPU로 수행하는 시스템을 구분할 수있는 방법이 없습니다. 예를 들어 많은 컴퓨터에서 많은 프로세스의 균형을 유지하려는 경우 CPU 사용률이 쓸모가 없습니다. 로드는 당신이 원하는 것입니다.
실제로 실제로는 처리 시간 시계 중 하나 이상이 있습니다. 예를 들어 I / O를 기다리는 것이 하나 있습니다. 따라서 I / O 리소스 사용률을 계산할 수도 있습니다.
원래 질문에 대해서는 도움이되지 않았지만 흥미 롭기를 바랍니다. :)