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