時間片
時間片
時間片,簡單說來,就是CPU分配給各個程序的時間,使各個程序從表面上看是同時進行的,而不會造成CPU資源浪費。
在宏觀上:我們可以同時打開多個應用程序,每個程序并行不悖,同時運行。但是在微觀上:由於只有一個CPU,一次只能處理程序要求的一部分,如何處理公平,一種方法就是引入時間片,每個程序輪流執行。
舉個例子:
你同時輸入兩篇文檔:A.txt和B.txt;
你在A中輸入一個字之後,再在B中輸入一個字,輪流輸入,直至完成。總的看來你似乎在同時進行兩篇文章的錄入,你可以說我一邊寫A一邊寫B。但是具體到某個字時,就是沿著時間的前進,AB交替進行了。而你每個字輸入所佔用的這段時間,我們就可以稱之為時間片。
舉個多線程程序的例子,說明時間片是怎樣工作的(java)
如上:
由此可見:兩個線程是交替執行的(數字的變化),從宏觀上(同時輸出)。
以下是搜的資料:
1,什麼是時間片輪轉:
時間片輪轉調度是一種最古老,最簡單,最公平且使用最廣的演演算法是時間片調度。每個進程被分配一個時間段,稱作它的時間片,即該進程允許運行的時間。如果在時間片結束時進程還在運行,則CPU將被剝奪並分配給另一個進程。如果進程在時間片結束前阻塞或結束,則CPU當即進行切換。調度程序所要做的就是維護一張就緒進程列表,,當進程用完它的時間片后,它被移到隊列的末尾。
時間片輪轉調度中唯一有趣的一點是時間片的長度。從一個進程切換到另一個進程是需要一定時間的--保存和裝入寄存器值及內存映像,更新各種表格和隊列等。假如進程切換(process switch) - 有時稱為上下文切換(context switch),需要5毫秒,再假設時間片設為20毫秒,則在做完20毫秒有用的工作之後,CPU將花費5毫秒來進行進程切換。CPU時間的20%被浪費在了管理開銷上。
為了提高CPU效率,我們可以將時間片設為500毫秒。這時浪費的時間只有1%。但考慮在一個分時系統中,如果有十個交互用戶幾乎同時按下回車鍵,將發生什麼情況?假設所有其他進程都用足它們的時間片的話,最後一個不幸的進程不得不等待5秒鐘才獲得運行機會。多數用戶無法忍受一條簡短命令要5秒鐘才能做出響應。同樣的問題在一台支持多道程序的個人計算機上也會發生。
結論可以歸結如下:時間片設得太短會導致過多的進程切換,降低了CPU效率;而設得太長又可能引起對短的交互請求的響應變差。將時間片設為100毫秒通常是一個比較合理的折衷。