第1章 遊戲之樂 讓CPU佔用率曲線聽你指揮

2021-09-07 00:07:14 字數 2222 閱讀 4856

寫乙個程式,讓用於來決定windows任務管理器(task manager)的cpu佔用率。程式越精簡越好,計算機語言不限。例如,可以實現下面三種情況:

cpu的佔用率固定在50%,為一條直線;

cpu的佔用率為一條直線,但是具體佔用率由命令列引數決定(引數範圍1~100);

cpu的佔用率狀態是乙個正弦曲線。

乙個空的for迴圈for(int i=0;i

loop:

mov dx i ;將i置入dx暫存器

inc dx ;將dx從暫存器加1

mov i dx ;將dx中的值賦回i

cmp i n ;比較i和n

jl loop ; i小於n時則重複迴圈

需要執行5條**,假設要執行的cpu是2.66ghz(2.66*10^9個時鐘週期每秒)。現在cpu每個時鐘週期可以執行兩條以上的**,那麼我們就取平均值兩條,於是讓(2660000000*2)/5=1064000000(迴圈/秒),如果讓cpu工作1秒鐘,然後休息1秒鐘,波形很可能就是鋸齒狀的——先達到乙個峰值(>50%),然後跌到乙個很低的佔用率。

於是嘗試降兩個數量級。用10ms是因為它不大不小,比較接近windows的排程時間片。如果太小會造成執行緒頻繁被喚醒和掛起,無形中增加了核心時間的不確定性影響。最後我們得到如下**:

package

chapter1youxizhile;

/*** 【解法一】簡單的方法

* 執行的cpu是2.66ghz(2.66*10^9個時鐘週期每秒)

* @author

dell *

*/public

class

controlcpu1 catch

(interruptedexception e) }}

}

在不斷調整10640000後,我們就可以在一台指定的機器上獲得一條大致穩定的50%cpu佔用率直線。

package

chapter1youxizhile;

/*** 【解法二】使用system.currenttimemillis()和thread.sleep()

* 執行的cpu是2.66ghz(2.66*10^9個時鐘週期每秒)

* @author

dell *

*/public

class

copyofcontrolcpu2

catch

(interruptedexception e) }}

}

效果如下:

這兩種解法都是假設目前系統上只有當前程式在執行,但實際上,作業系統中有很多程式會同時執行各種各樣的任務,如果此刻其他程序使用了10%的cpu,那麼我們的程式應該只能使用40%的cpu,這樣才能達到50%的效果。

怎麼做呢?這就需要用到另個工具的幫忙——perform.exe。如下圖所示:

我們可以寫程式來查詢perform的值,mircrosoft .net framework提供了performancecounter這一物件,可以方便地得到當前各種效能的資料,包括cpu的使用率。例如下面這個程式:

//

c# code

static

void makeusage(float

level)

}

可以看到,上面的解法能方便地處理各種cpu使用率的引數。這個程式可以解答前面提到的問題2。

package

chapter1youxizhile;

/*** 【解法四】正弦曲線

* @author

dell *

*/public

class

copyofcopyofcontrolcpu4

long starttime = 0;

int j = 0;

while(true

) catch

(interruptedexception e)

j++;}}

}

程式執行後任務管理器效果如下:

讓CPU佔用率畫出正弦曲線

都說計算機程式設計乏味,可是好多程式設計師卻玩地津津有味。計算機的世界什麼都可以用來做為程式設計師的遊戲,比如cpu。下面就讓我們來讓windows下的任務管理器聽我們指揮,畫出完美的正弦曲線吧。思路 0 目測windows下任務管理器重新整理頻率為1s,每一次重新整理的cpu佔用率其實就是這一時間...

讓CPU佔用率畫出正弦曲線

分類 程式設計之美 math.h windows manager 任務程式設計遊戲 都說計算機程式設計乏味,可是好多程式設計師卻玩地津津有味。計算機的世界什麼都可以用來做為程式設計師的遊戲,比如cpu。下面就讓我們來讓windows下的任務管理器聽我們指揮,畫出完美的正弦曲線吧。思路 0 目測win...

經典面試題 讓CPU佔用率聽你指揮

在 程式設計之美 上有這麼一道題,題目是 程式設計讓cpu的佔用率呈正弦曲線變化。初看這題基本沒什麼思路,後來了解到cpu佔用率的計算公式就找到突破口了。cpu佔用率計算公式 有了上面的公式,只需要讓乙個時間片內執行的時間占該時間片的比例呈正弦變化即可。正弦曲線的 double time 0.0 d...