「Learning」區別執行緒和程式

weixin_34377065發表於2018-08-04

之前在碼農翻身上看到一篇講解執行緒、程式和協程的文章,覺得寫得很好,所以搬過來學習一下。

原文地址:《一個故事講完程式、執行緒和協程》

Learning Card

階段一:

背景:CPU是稀缺資源,程式必須排隊輪流使用

批處理: 程式A執行完成後,程式B再執行

階段二:

背景:CPU速度越來越快,批處理效率太低,資源浪費太大

程式:一個執行中的程式,它可以暫停下來,暫停的地方即執行到哪一行程式指令了,是這個程式的執行現場,暫停之後再次執行時,從執行現場開始繼續。程式之間是相互交替執行的。
併發:由於CPU的執行速度特別快,雖然程式再不斷切換執行,但看起來像是在同時執行
並行:每個程式能夠佔用一個CPU,真正地同時執行
執行緒:程式中的單一的順序控制流程,是最小的排程單位。每個程式都至少有一個執行緒,如果只有一個執行緒,就是程式本身;也可以同時執行多個執行緒完成不同的工作,成為多執行緒

階段三:

背景:多執行緒的協作有時會比較麻煩,需要加鎖和執行緒的通知、等待等。

協程:比執行緒更加輕量級,它就像是有多個輕量級的執行緒,它們之間會切換控制權,控制權在誰手裡,誰就執行

協程近幾年在Lua和Python中應用比較多。


為了方便記憶,我整理了一下以上知識點。

一個程式一個程式
程式裡面還有執行緒
一個執行緒叫單執行緒
多個執行緒叫多執行緒
執行緒裡還能有協程

一個CPU配多個程式叫併發
每個程式配一個CPU叫並行

相關文章