1. 程式人生 > >關於Python的程序執行緒協程之大話多程序多執行緒

關於Python的程序執行緒協程之大話多程序多執行緒

大話多程序多執行緒

“程序——資源分配的最小單位,執行緒——程式執行的最小單位”

程序:

是程式執行時的一個例項,即它是程式已經執行到課中程度的資料結構的彙集。從核心的觀點看,程序的目的就是擔當分配系統資源(CPU時間、記憶體等)的基本單位。在Linux系統下,啟動一個新的程序必須分配給它獨立的地址空間,建立眾多的資料表來維護它的程式碼段、堆疊段和資料段,多程序是一種”昂貴”的多工工作方式。

執行緒:

是程序的一個執行流,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位。一個程序由幾個執行緒組成(擁有很多相對獨立的執行流的使用者程式共享應用程式的大部分資料結構),執行緒與同屬一個程序的其他的執行緒共享程序所擁有的全部資源。運行於一個程序中的多個執行緒,它們彼此之間使用相同的地址空間,共享大部分資料

漫談程序與執行緒區別:

程序有獨立的地址空間,一個程序崩潰後,在保護模式下不會對其它程序產生影響,而執行緒只是一個程序中的不同執行路徑。

執行緒有自己的堆疊和區域性變數,但執行緒沒有單獨的地址空間,(同一程序內的執行緒共享程序的地址空間),一個執行緒死掉就等於整個程序死掉,所以多程序的程式要比多執行緒的程式健壯。但在但對於一些要求併發處理並且又要共享某些變數的併發操作,只能用執行緒,不能用程序。

開銷上各有千秋。啟動一個執行緒所花費的空間遠遠小於啟動一個程序所花費的空間,而且,執行緒間彼此切換所需的時間也遠遠小於程序間切換所需要的時間。據統計,總的說來,一個程序的開銷大約是一個執行緒開銷的30倍左右,當然,在具體的系統上,這個資料可能會有較大的區別。程序切換時,耗費資源較大,效率要差一些。

通訊機制不同。對不同程序來說,它們具有獨立的資料空間,要進行資料的傳遞只能通過通訊的方式進行,這種方式不僅費時,而且很不方便。執行緒則不然,由於同一程序下的執行緒之間共享資料空間,所以一個執行緒的資料可以直接為其它執行緒所用,這不僅快捷,而且方便。當然,資料的共享也帶來其他一些問題,有的變數不能同時被一個以上的執行緒所修改,有的子程式中宣告為static的資料有可能出現更多問題,比如修改後的資料結果不一致(競態條件)。

優缺點總結: 程序優點:程式設計、除錯簡單,可靠性較高。 程序缺點:建立、銷燬、切換速度慢,記憶體、資源佔用大。
執行緒優點:建立、銷燬、切換速度快,記憶體、資源佔用小。 執行緒缺點:程式設計、除錯複雜,可靠性較差。

多執行緒處理,有以下應用優點:

提高應用IO響應。這對圖形介面的程式尤其有意義,當一個操作耗時很長時,整個系統都會等待這個操作,此時程式不會響應鍵盤、滑鼠、選單的操作,而使用多執行緒技術,將耗時長的IO操作(time
consuming)置於一個新的執行緒,可以避免這種尷尬的情況。

使多CPU系統更加高效。一般說來,作業系統會保證當執行緒數不大於CPU數目時,不同的執行緒運行於不同的CPU上。

模組化程式結構。一個既長又複雜的程序可以考慮分為多個執行緒,成為幾個獨立或半獨立的模組化執行,這樣利於程式的迭代。

多程序處理,有以下應用優點:

每個程序互相獨立,不影響主程式的穩定性,子程序崩潰沒關係; 通過增加CPU,就可以容易擴充效能;

可以儘量減少執行緒加鎖/解鎖的影響,極大提高效能,就算是執行緒執行的模組演算法效率低也沒關係;

每個子程序都有2GB地址空間和相關資源,總體能夠達到的效能上限非常大

ps:在Unix上程式設計採用多執行緒還是多程序的爭執由來已久,WEB伺服器技術中,Apache是採用多程序的(perfork模式,每客戶連線對應一個程序,每程序中只存在唯一一個執行線
程),Java的Web容器Tomcat、Websphere等都是多執行緒的(每客戶連線對應一個執行緒,所有執行緒都在一個程序中)。