我們平時在開發的時候,感覺并沒有受cpu核心數的限制,想啟動線程就啟動線程,哪怕是在單核CPU上,為什麼?這是因為作業系統提供了一種CPU時間片輪轉機制。
時間片輪轉排程是一種最古老、最簡單、最公平且使用最廣的算法,又稱RR排程。每個程序被配置設定一個時間段,稱作它的時間片,即該程序允許運作的時間。
百度百科對CPU時間片輪轉機制原了解釋如下:
如果在時間片結束時程序還在運作,則CPU将被剝奪并配置設定給另一個程序。如果程序在時間片結束前阻塞或結束,則CPU當即進行切換。排程程式所要做的就是維護一張就緒程序清單,當程序用完它的時間片後,它被移到隊列的末尾。
時間片輪轉排程中唯一有趣的一點是時間片的長度。從一個程序切換到另一個程序是需要一定時間的–儲存和裝入寄存器值及記憶體映像,更新各種表格和隊列等。假如程序切換(process switch) - 有時稱為上下文切換(context switch),需要5毫秒,再假設時間片設為20毫秒,則在做完20毫秒有用的工作之後,CPU将花費5毫秒來進行程序切換。CPU時間的20%被浪費在了管理開銷上。
為了提高CPU效率,我們可以将時間片設為500毫秒。這時浪費的時間隻有1%。但考慮在一個分時系統中,如果有十個互動使用者幾乎同時按下Enter鍵,将發生什麼情況?假設所有其他程序都用足它們的時間片的話,最後一個不幸的程序不得不等待5秒鐘才獲得運作機會。多數使用者無法忍受一條簡短指令要5秒鐘才能做出響應。同樣的問題在一台支援多道程式的個人計算機上也會發生。
結論可以歸結如下:時間片設得太短會導緻過多的程序切換,降低了CPU效率;而設得太長又可能引起對短的互動請求的響應變差。将時間片設為100毫秒通常是一個比較合理的折中。