python全棧開發基礎【第二十三篇】線程
一、什麽是線程
線程:顧名思義,就是一條流水線工作的過程,一條流水線必須屬於一個車間,一個車間的工作過程是一個進程
所以,進程只是用來把資源集中到一起(進程只是一個資源單位,或者說資源集合),而線程才是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全棧開發基礎【第二十三篇】線程