在解釋進程以前,咱們要知道在操做系統中存在就緒隊列和阻塞隊列
進程
進程基本概念
- 進程是執行中的程序, 也就是說進程是動態的, 程序是靜態的
- 進程是操做系統分配資源的最小單位,有一個進程控制塊(PCB), 有本身惟一的一個進程標識符(PID)
- 進程之間相互獨立, 內存不共享
- 每一個進程都是一個實體, 每一個進程都有屬於本身的一塊內存, 進程是一個執行中的程序
- 進程的建立,銷燬,切換的開銷都比較大
- 進程只能建立子進程, 沒法建立平級進程
進程三種狀態
- 就緒: 獲取到除CPU以外的其餘全部資源, 只要處理器分配資源就能夠立刻運行, 此時進程處於就緒隊列中, 等待得到處理機
- 運行: 就緒狀態的進程獲取到CPU以後轉爲運行狀態, 進程開始執行
- 阻塞: 進程申請的資源未被知足, 好比申請一個臨界資源時(臨界區是進程訪問臨界資源的那一段代碼), 資源正在被其餘進程使用, 這時進程進入阻塞狀態, 釋放處理器, 進程的阻塞是主動的, 也就是本身將本身阻塞, 這時進程會被加入阻塞隊列, 在實際中, 可能會有多個阻塞進程, 分別放置由於不一樣緣由被阻塞的進程. 當一個進程使用完臨界資源後, 會到阻塞隊列中去喚醒處於阻塞隊列頭的進程.
CPU處理進程方式
時間片輪轉:
給每一個進程分配一個時間片, 若是進程在時間片內執行完就直接執行下一個進程, 若是沒執行完, 進程釋放CPU給下一個進程
優先級隊列:
在優先級隊列中, 每一個進程都會被分配優先級(優先級有靜態和動態之分, 所謂靜態即是在整個運行過程當中優先級不會改變, 而動態優先級在運行時, 優先級會發生改變),處理機每次選擇當前優先級最高的進程執行.
非搶佔式和搶佔式區別:
非搶佔式: 在進程運行時, 不容許別的進程剝奪當前運行進程的處理器, 在這種狀況下, 在用優先級分配處理機時, 正在運行的進程優先級不必定是當前全部進程中優先級最高的, 由於可能在進程運行過程當中有更高的進程被加入到就緒隊列中.
搶佔式: 在進程運行中, 已得到處理機的進程可能會被新來的優先級更高的進程剝奪處理機.多線程
線程
線程基本概念
- 線程是CPU的基本調度單位
- 一個進程通常包含多個線程, 一個進程下的多個線程共享進程的資源
- 不一樣進程之間的線程相互不可見
- 線程不能獨立執行
- 一個線程能夠建立和撤銷另一個線程
進程和線程的區別
- 一個進程至少有一個進程, 一個進程至少有一個線程
- 進程有本身獨有的內存單元, 而多個線程共享一塊內存單元
- 一個進程死掉對於其餘進程無影響, 可是一個線程死掉整個進程都會死掉, 因此多線程程序沒有多進程程序健壯
協程
協程基本概念
- 協程是用戶模式下的輕量級線程, 協程不被內核所知
- 協程由用戶本身調度