1. 程式人生 > >python全棧開發基礎【第二十三篇】線程

python全棧開發基礎【第二十三篇】線程

不同 控制 上海 strong 執行 不能 子進程 申請 什麽

一、什麽是線程

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

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

 多線程(即多個控制線程)的概念是,在一個進程中存在多個控制線程,多個控制線程共享該進程的地址空間,相當於一個車間內有多條流水線,都共用一個車間的資源。(一個進程裏面開多個線程(共享同一個進程裏面的內存空間))

例如,北京地鐵與上海地鐵是不同的進程,而北京地鐵裏的13號線是一個線程,北京地鐵所有的線路共享北京地鐵所有的資源,比如所有的乘客可以被所有線路拉。

註意:

1.所以進程裏面真正幹活的是線程(進程裏面有線程)

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

二、線程的創建開銷小

創建進程的開銷要遠大於線程?

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

一個車間就是一個進程,一個車間至少一條流水線(一個進程至少一個線程)

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

而建線程,就只是在一個車間內造一條流水線,無需申請空間,所以創建開銷小

三、線程與進程的區別

1.創建線程比進程開銷小(開一個進程,裏面就有空間了,而線程在進程裏面,就沒必要在開一個空間了)
2.多線程一定是在一個進程裏面開啟的,共享進程裏面的資源
3.線程啟動的速度快
4.同一進程下的多個線程共享進程的資源,而多個進程之間內存空間是隔離的
n = 100
def work():
global n
n-=100
如果開進程n是相互獨立的,而線程是共享了資源,就不隔離了

在wins下開進程,子進程不會拷貝父進程的
在linux下開進程,子進程會完全拷貝父進程的

5.線程可以跟它所在的進程之內 的線程通信

四、為何要用多線程

多線程指的是,在一個進程中開啟多個線程,簡單的講:如果多個任務共用一塊地址空間,那麽必須在一個進程內開啟多個線程。詳細的講分為4點:

  1. 多線程共享一個進程的地址空間

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

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

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

python全棧開發基礎【第二十三篇】線程