Python之併發程式設計(四)多執行緒 相關理論

2022-09-15 17:48:13 字數 1385 閱讀 8509

什麼是執行緒

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

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

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

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

注意:1.所以程序裡面真正幹活的是執行緒(程序裡面有執行緒)

2.程序只是用來把資源互相隔離開,而執行緒才是真正負責cpu來調動他的

執行緒的建立開銷小

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

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

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

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

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

執行緒與程序的區別

1.建立執行緒比程序開銷小(開乙個程序,裡面就有空間了,而執行緒在程序裡面,就沒必要在開乙個空間了)

2.多執行緒一定是在乙個程序裡面開啟的,共享程序裡面的資源

3.執行緒啟動的速度快

4.同一程序下的多個執行緒共享程序的資源,而多個程序之間記憶體空間是隔離的

n = 100

def work():

global n

n-=100

如果開程序n是相互獨立的,而執行緒是共享了資源,就不隔離了

在wins下開程序,子程序不會拷貝父程序的

在linux下開程序,子程序會完全拷貝父程序的

5.執行緒可以跟它所在的程序之內 的執行緒通訊

為何要用多執行緒

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

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

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

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

Python之併發程式設計(五)多執行緒

多執行緒的概念介紹 threading模組介紹 threading模組和multiprocessing模式在使用層面,有甚大的相似性 開啟多執行緒的兩種方式 開啟程序的第一種方式 1.建立執行緒的開銷比建立程序的開銷小,因而建立執行緒的速度快 from multiprocessing import ...

python併發程式設計 多執行緒 執行緒理論

一 什麼是執行緒 在傳統作業系統中,每個程序有乙個位址空間,而且預設就有乙個控制線程 執行緒顧名思義,就是一條流水線工作的過程 流水線的工作需要電源,電源就相當於cpu 而一條流水線必須屬於乙個車間,乙個車間的工作過程是乙個程序,車間負責把資源整合到一起,是乙個資源單位,而乙個車間內至少有一條流水線...

多執行緒併發程式設計

docker 可謂是開啟了容器化技術的新時代,現在無論大中小公司基本上都對容器化技術有不同程度的嘗試,或是已經進行了大量容器化的改造。伴隨著 kubernetes 和 cloud native 等技術和理念的普及,也大大增加了業務容器化需求。而這一切的推進,不可避免的技術之一便是構建容器映象。在本場...