進程,線程

進程,線程

學習筆記,歡迎指正。


進程概念:

  • 一個完整程序的執行過程或實例。
  • 每個進程自帶一個主線程。
  • 進程內數據共享。

線程概念:

  • 程序運行的一個子序列。
  • 線程也可以再開子線程。

進程與線程的明顯區別:

  • 進程比線程層次高,線程依附於進程。
  • 進程由操作系統來調度,線程由進程管理。

有點抽象,我的理解是:

進程就是項目負責人,他本身是不幹活的,就發任務給後勤。真正幹活的是他的得力手下——主線程。

簡單的項目一個人也就搞定了,遇到複雜的項目,一個人分身乏術。

比如老闆說我的七大姑八大姨要過來聚一聚,他們有的坐飛機,有的坐高鐵,有的自駕,有的就在市中心,你去接一下他們,別讓他們久等了。這能怎麼辦,飛機晚點怎麼辦,火車晚點怎麼辦,市中心堵車怎麼辦。一個人去接這麼多人還不讓久等,這是不可能的。那就多派幾個人去唄,1號子線程去等飛機,2號子線程去等高鐵,3號子線程去收費站等著,4號子線程開車去市中心接人,主線程就在家等電話,隨時給老闆報告一下進度。

以上的例子只是說明某種情況下多線程的必要性,看起來所有線程各干各的,效率蠻高。宏觀來講,多線程就是要達到這種效果,讓你認為他們是同時運行的。

但線程的運行本質並不是這樣。真實的情況下,可以把線程當做孫悟空,分身無數,但思維只有一個(單核),他的思維降臨到哪個分身身上,這個分身才能行動,其他分身就停住了。想要看起來都在動,那麼思維就要以很高的速度在不同的分身之間流竄,在每個分身上停留的時間,就是CPU給線程分配的時間片段。

一般來講,分給所有線程的時間片段長度相等(存疑),所有高優先順序的線程執行完畢之後才會給下一個優先順序的線程分配時間片段(理論上的,實際還是看操作系統的調度策略)。也就是打boss的那個分身要把boss打趴下了,才輪到打小兵的分身行動。

上面講的是單核,也就是同一時間只有一個執行線程。多核也好理解,就是加幾個執行線程,唐僧(他來幹啥)、豬八戒、沙和尚出場了。

推薦閱讀:

CountDownLatch實現計算線程阻塞
Python 中的多線程和多進程(上)
多線程(1): 亂序和屏障

TAG:多線程 | 進程 | 線程 |