htop이 왜 그렇게 빨리 시작됩니까?

htop이 왜 그렇게 빨리 시작됩니까?

나는 프로세스에 대한 정보를 읽으려고 노력합니다./프로세스/htop 및 top과 같습니다.

htop이나 top의 "CPU%" 값은 해당 프로세스의 stat 파일에 있는 utime과 stime 값을 합산하고, 일정 시간이 지나면 그 값을 반복하고, 그 차이를 경과 시간으로 나누어 계산한 것으로 보인다. 정확도는 보통 10밀리초(getconf CLK_TCK가 100을 반환함) 정도로 보이기 때문에 세 자릿수 정확도를 얻으려면 최소한 1초는 기다려야 할 것 같습니다.

그러나 htop과 top은 "CPU%" 값을 사용하여 프로세스를 즉시 표시합니다.

그들이 어떤 종류의 트릭을 사용한 걸까요, 아니면 제가 여기서 실수를 하고 있는 걸까요?

내 현재(C++) 구현은 내 주장을 지원하며 다음과 같습니다.

// acquire initial
std::this_thread::sleep_for(measuringPeriod);
// acquire final

static const long CLK_TCK = sysconf(_SC_CLK_TCK);
long unsigned int initialTime = initial.utime + initial.stime;
long unsigned int finalTime = final.utime + final.stime;
long unsigned int time = finalTime - initialTime;
double measuringTime = (double)(std::chrono::duration_cast
                                <std::chrono::milliseconds>(measuringPeriod)
                                .count()) / 1000.0; // in seconds
double cpuLoad = (double)time * 100.0 / (double)CLK_TCK
                              / measuringTime; // in percent

관련 정보