進程與線程1. 進程 進程是資源分配的基本單位。 進程控制塊 (Process Control Block, PCB) 描述進程的基本信息和運行狀態(tài),所謂的創(chuàng)建進程和撤銷進程,都是指對 PCB 的操作。 下圖顯示了 4 個程序創(chuàng)建了 4 個進程,這 4 個進程可以并發(fā)地執(zhí)行。 2. 線程 線程是獨立調度的基本單位。 一個進程中可以有多個線程,它們共享進程資源。 3. 區(qū)別 - 擁有資源:進程是資源分配的基本單位,但是線程不擁有資源,線程可以訪問隸屬進程的資源。
- 調度:線程是獨立調度的基本單位,在同一進程中,線程的切換不會引起進程切換,從一個進程內的線程切換到另一個進程中的線程時,會引起進程切換。
- 系統(tǒng)開銷:由于創(chuàng)建或撤銷進程時,系統(tǒng)都要為之分配或回收資源,如內存空間、I/O 設備等,所付出的開銷遠大于創(chuàng)建或撤銷線程時的開銷。類似地,在進行進程切換時,涉及當前執(zhí)行進程 CPU 環(huán)境的保存及新調度進程 CPU 環(huán)境的設置,而線程切換時只需保存和設置少量寄存器內容,開銷很小。
- 通信方面:進程間通信 (IPC) 需要進程同步和互斥手段的輔助,以保證數據的一致性。而線程間可以通過直接讀/寫同一進程中的數據段(如全局變量)來進行通信。
舉例:QQ 和瀏覽器是兩個進程,瀏覽器進程里面有很多線程,例如 HTTP 請求線程、事件響應線程、渲染線程等等,線程的并發(fā)執(zhí)行使得在瀏覽器中點擊一個新鏈接從而發(fā)起 HTTP 請求時,瀏覽器還可以響應用戶的其它事件。 進程狀態(tài)的切換- 就緒狀態(tài)(ready):等待被調度
- 運行狀態(tài)(running)
- 阻塞狀態(tài)(waiting):等待資源
應該注意以下內容: - 只有就緒態(tài)和運行態(tài)可以相互轉換,其它的都是單向轉換。就緒狀態(tài)的進程通過調度算法從而獲得 CPU 時間,轉為運行狀態(tài);而運行狀態(tài)的進程,在分配給它的 CPU 時間片用完之后就會轉為就緒狀態(tài),等待下一次調度。
- 阻塞狀態(tài)是缺少需要的資源從而由運行狀態(tài)轉換而來,但是該資源不包括 CPU 時間,缺少 CPU 時間會從運行態(tài)轉換為就緒態(tài)。
更多內容請關注每日編程,每天進步一點。
|