python併發程式設計之多執行緒理論部分 day9

2021-09-21 04:08:00 字數 1325 閱讀 1420

一、什麼是執行緒  

在傳統作業系統中,每個程序有乙個位址空間,而且預設就有乙個控制線程。

執行緒就是一條流水線工作的過程,一條流水線必須屬於乙個車間,乙個車間的工作過程是乙個程序。

車間負責把資源整合到一起,是乙個資源單位,而乙個車間內至少有乙個流水線流水線的工作需要電源,電源就相當於cpu。

所以,程序只是用來把資源集中到一起(程序只是乙個資源單位,或者說資源集合),而執行緒才是cpu上的執行單位。

多執行緒(即多個控制線程)的概念是,在乙個程序中存在多個控制線程,多個控制線程共享該程序的位址空間,相當於乙個車間內有多條流水線,都共用乙個車間的資源。

例如,北京地鐵與上海地鐵是不同的程序,而北京地鐵裡的13號線是乙個執行緒,北京地鐵所有的線路共享北京地鐵所有的資源,比如所有的乘客可以被所有線路拉。

二、執行緒的建立開銷小

1、建立程序的開銷要遠大於執行緒?

如果我們的軟體是乙個工廠,該工廠有多條流水線,流水線工作需要電源,電源只有乙個即cpu(單核cpu)

乙個車間就是乙個程序,乙個車間至少一條流水線(乙個程序至少乙個執行緒)

建立乙個程序,就是建立乙個車間(申請空間,在該空間內建至少一條流水線)

而建執行緒,就只是在乙個車間內造一條流水線,無需申請空間,所以建立開銷小

2、程序之間是競爭關係,執行緒之間是協作關係?

車間直接是競爭/搶電源的關係,競爭(不同的程序直接是競爭關係,是不同的程式設計師寫的程式執行的,迅雷搶占其他程序的網速,360把其他程序當做病毒殺死)

乙個車間的不同流水線式協同工作的關係(同乙個程序的執行緒之間是合作關係,是同乙個程式寫的程式內開啟動,迅雷內的執行緒是合作關係)

三、執行緒與程序的區別

後續補充

四、為何要用多執行緒

1.多執行緒共享乙個程序的位址空間

2.執行緒比程序更輕量級,執行緒比程序更容易建立可撤銷,在許多作業系統中,建立乙個執行緒比建立乙個程序要快10-100倍,在有大量執行緒需要動態和快速修改時,這一特性很有用

3.若多個執行緒都是cpu密集型的,那麼並不能獲得效能上的增強,但是如果存在大量的計算和大量的i/o處理,擁有多個執行緒允許這些活動彼此重疊執行,從而會加快程式執行的速度。

4.在多cpu系統中,為了最大限度的利用多核,可以開啟多個執行緒,比開程序開銷要小的多。(這一條並不適用於python)

五、多執行緒的應用舉例

核心級執行緒:切換由核心控制,當執行緒進行切換的時候,由使用者態轉化為核心態。切換完畢要從核心態返回使用者態;

python併發程式設計之多執行緒

程序包含了執行該程式所需要所有資源 程序是乙個資源單位 執行緒是cpu的最小執行單位 每乙個程序一旦被建立 就預設開啟了一條執行緒 稱之為主線程 使用執行緒可以提高程式效率 為何不用多程序提高效率 是因為程序對作業系統的資源耗費非常高 執行緒共享建立它的程序的位址空間 程序有自己的位址空間。執行緒可...

python併發程式設計之多執行緒一

一,什麼是執行緒 執行緒也被稱為輕量程序電腦科學術語,指執行中的程式的排程單位。執行緒是程序中的實體,乙個程序可以擁有多個執行緒,乙個執行緒必須有乙個父程序。執行緒不擁有系統資源,只有執行必須的一些資料結構 它與父程序的其它執行緒共享該程序所擁有的全部資源。執行緒可以建立和撤消執行緒,從而實現程式的...

1 3併發程式設計之多執行緒通訊

多執行緒之間通訊,其實就是多個執行緒在操作同乙個資源,但是操作的動作不同。1.因為涉及到物件鎖,他們必須都放在synchronized中來使用.wait notify一定要在synchronized裡面進行使用。2.wait必須暫定當前正在執行的執行緒,並釋放資源鎖,讓其他執行緒可以有機會執行 3....