python3進程和線程

在解釋進程以前,咱們要知道在操做系統中存在就緒隊列和阻塞隊列

進程

進程基本概念

  1. 進程是執行中的程序, 也就是說進程是動態的, 程序是靜態的
  2. 進程是操做系統分配資源的最小單位,有一個進程控制塊(PCB), 有本身惟一的一個進程標識符(PID)
  3. 進程之間相互獨立, 內存不共享
  4. 每一個進程都是一個實體, 每一個進程都有屬於本身的一塊內存, 進程是一個執行中的程序
  5. 進程的建立,銷燬,切換的開銷都比較大
  6. 進程只能建立子進程, 沒法建立平級進程

進程三種狀態

  1. 就緒: 獲取到除CPU以外的其餘全部資源, 只要處理器分配資源就能夠立刻運行, 此時進程處於就緒隊列中, 等待得到處理機
  2. 運行: 就緒狀態的進程獲取到CPU以後轉爲運行狀態, 進程開始執行
  3. 阻塞: 進程申請的資源未被知足, 好比申請一個臨界資源時(臨界區是進程訪問臨界資源的那一段代碼), 資源正在被其餘進程使用, 這時進程進入阻塞狀態, 釋放處理器, 進程的阻塞是主動的, 也就是本身將本身阻塞, 這時進程會被加入阻塞隊列, 在實際中, 可能會有多個阻塞進程, 分別放置由於不一樣緣由被阻塞的進程. 當一個進程使用完臨界資源後, 會到阻塞隊列中去喚醒處於阻塞隊列頭的進程.

CPU處理進程方式

時間片輪轉:
給每一個進程分配一個時間片, 若是進程在時間片內執行完就直接執行下一個進程, 若是沒執行完, 進程釋放CPU給下一個進程
優先級隊列:
在優先級隊列中, 每一個進程都會被分配優先級(優先級有靜態和動態之分, 所謂靜態即是在整個運行過程當中優先級不會改變, 而動態優先級在運行時, 優先級會發生改變),處理機每次選擇當前優先級最高的進程執行.
非搶佔式和搶佔式區別:
非搶佔式: 在進程運行時, 不容許別的進程剝奪當前運行進程的處理器, 在這種狀況下, 在用優先級分配處理機時, 正在運行的進程優先級不必定是當前全部進程中優先級最高的, 由於可能在進程運行過程當中有更高的進程被加入到就緒隊列中.
搶佔式: 在進程運行中, 已得到處理機的進程可能會被新來的優先級更高的進程剝奪處理機.多線程


線程

線程基本概念

  1. 線程是CPU的基本調度單位
  2. 一個進程通常包含多個線程, 一個進程下的多個線程共享進程的資源
  3. 不一樣進程之間的線程相互不可見
  4. 線程不能獨立執行
  5. 一個線程能夠建立和撤銷另一個線程

進程和線程的區別

  1. 一個進程至少有一個進程, 一個進程至少有一個線程
  2. 進程有本身獨有的內存單元, 而多個線程共享一塊內存單元
  3. 一個進程死掉對於其餘進程無影響, 可是一個線程死掉整個進程都會死掉, 因此多線程程序沒有多進程程序健壯

協程

協程基本概念

  1. 協程是用戶模式下的輕量級線程, 協程不被內核所知
  2. 協程由用戶本身調度
相關文章
相關標籤/搜索