關於“50% CPU 佔有率”題目的內容擴充套件

nomasp發表於2015-04-23

System Idle Process

Windows頁面記憶體管理程式,擁有0級優先。該程式作為單執行緒執行在每個處理器上,並在系統不處理其他執行緒的時候反派處理器的時間。有意思的是,它的CPU佔有率越大則表示可供分配的CPU資源越多。該程式是系統必須的,不能禁止,但它卻又不是系統程式,它允許於後臺而且不使用網路。該程式名稱為“系統空閒程式”,相應的描述為”處理器空閒時間百分比“。

那麼怎麼找到它呢?在Windows XP/Vista/7中,開啟工作管理員就可以直接看到,在Windows 8/8.1以及Windows 10中,則稍顯隱蔽,因此甚至許多人認為已經不存在了……

這裡寫圖片描述

什麼是0級優先?

在Windows上,每個程式都有一個優先順序,範圍從0到31,0為最低優先順序,31為最高優先順序。當系統在決定程式排程的時候,會優先考慮優先順序為31的程式,如果存在則先執行。在執行完該程式後再查詢是否還有其他優先順序為31的程式,如果有的話則不會排程優先順序為0至30的程式。Windows支援6個優先順序類:Real-time(實時)、High(高)、Above normal(高於標準)、Normal(標準)、Below normal(低於標準)和Idle(空閒)。在程式中還有執行緒,執行緒同樣也有相對執行緒優先順序:Time-critical(關鍵時間)、Heightest(最高,不過沒有關鍵時間優先)、Above normal(高於標準)、Normal(標準)、Below normal(低於標準)、Lowest(最低,同樣,也比Idle優先)和Idle(空閒)。開發者不需要設定具體的優先順序0-31,Windows會主動將“優先順序類”和“相對程式優先順序”對映到相應的優先順序上。注意,這樣對映方式隨Windows版本的不同而不同,因此下圖只做參考。

這裡寫圖片描述

DWORD

DWORD就是Double Word,每個Word為2個位元組的長度,DWORD雙字即為4個位元組,每個位元組是8位,共32位。

那麼如何在C++中需要include什麼呢?

#include "windows.h"

關於DWORD需要注意的一點是,它雖然表示的是32位無符號整數,但無論對於32位還是64位的Windows作業系統,DWORD都是32位無符號整數。

Sleep()

在C/C++中的Sleep()函式的功能是執行掛起一段時間,和DWORD需要一樣的標頭檔案。在Linux中則需要包含unistd.h標頭檔案。

#include<unistd.h>

注意在VC中Sleep的第一個字母是大寫的“S”,而在標準C中則是小寫。Sleep()需要一個無符號整形,單位是毫秒。而sleep()中則是秒。

GetTickCount()

DWORD GetTickCount(void)從0開始計時,返回自程式啟動後的毫秒數(不含系統暫停時間)。其同樣需要包含“windows.h”標頭檔案。

Perfmon.exe



為使本文得到斧正和提問,轉載請註明出處:
http://blog.csdn.net/nomasp

相關文章