之前在微軟的《編程之美》中有道題目大概是“控制任務管理器中cpu的曲線”,也就是根據自己的意願來控制cpu的佔有率。而我今天只想說的是如何讓cpu佔有率爲100%。
首先,我寫了如下程序:
void main()
{
while(true)
{
int n = 10;
}
}
也就是執行一個死循環,讓cpu沒有空閒,理論上說cpu的佔有率就應該是100%。
當我打開windows任務管理器,查看cpu佔有率,圖如下:
很明顯cpu佔有率只有30%左右,跟理想情況100%差別很大。
後來我發現cpu使用記錄中有四幅cpu的曲線圖,以前從來沒有認真去看過,這四幅圖是什麼意思。在網上查了,才知道這四幅圖分別表示cpu0、cpu1、cpu2、cpu3的使用記錄。也就說我電腦上有4個cpu。我看了一下電腦的配置,雙核。這就對了,每個核可以虛擬出兩個cpu,總共四個cpu。
再回到程序,這個線程雖然是一直忙的,但是它可能被不同的cpu調度。如果時間片平均在每個cpu上,並且假設每個cpu性能一樣,那麼該線程在每個cpu上的佔有率應該爲25%,再加上其他程序的佔有率,接近30%,差不多。
那麼如何是該程序只運行在一個cpu上呢?可以在程序中設定。但是我們選擇更簡單的方法,在任務管理器中設置。如下圖:
選擇你的進程,鼠標右鍵,選擇設置相關性。
從這裏可以選擇cpu,注意選擇cpu以後不要重啓程序,直接去性能窗口看cpu即可。
我只選擇cpu0,然後再觀察cpu佔有率,發現cpu0的佔有率爲100%,跟預想情況一樣了。
總結:現在單個cpu的計算機已經很少了,就算是單核,多半會虛擬出兩個cpu。通過該例子,可以大致理解,線程被多cpu調度的情況。