python併發編程(四):多線程(理論篇)

一、什麼是線程

在傳統操作系統中,每個進程有一個地址空間,而且默認就有一個控制線程

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

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

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

二、創建線程開銷小

1. 創建一個進程,就相當於創建一個車間(申請空間,在該空間內建至少一條流水線)
2. 建線程,就只是在一個車間內造一條流水線,'無需申請空間',所以創建開銷小

三、進程和線程的區別

1. 同一進程下的各個線程共享創建它們的進程的地址空間;各個進程它們都有自己的地址空間。
2. 線程可以直接訪問其進程的數據段;進程有自己的父進程的數據段副本。
3. 線程可以直接與其進程的其他線程通信;進程必須使用進程間通信與同級進程通信。
4. 新線程很容易創建;新進程需要複製父進程。
5. 線程可以對同一進程的線程進行相當大的控制;進程只能對子進程進行控制。
6. 對主線程的更改(取消、優先級更改等)可能會影響進程其他線程的行爲;對父進程的更改不會影響子進程。

四、爲什麼要用多線程?

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

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

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

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

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

五、 在用戶空間實現的線程(瞭解)

線程的實現可以分爲兩類:用戶級線程(User-Level Thread)和內核線線程(Kernel-Level Thread),後者又稱爲內核支持的線程或輕量級進程。在多線程操作系統中,各個系統的實現方式並不相同,在有的系統中實現了用戶級線程,有的系統中實現了內核級線程。

用戶級線程內核的切換由用戶態程序自己控制內核切換,不需要內核干涉,少了進出內核態的消耗,但不能很好的利用多核Cpu,目前Linux pthread大體是這麼做的。

六、在內核空間實現的線程(瞭解)

內核級線程:切換由內核控制,當線程進行切換的時候,由用戶態轉化爲內核態。切換完畢要從內核態返回用戶態;可以很好的利用smp,即利用多核cpu。windows線程就是這樣的。

七、用戶級與內核級線程的對比(瞭解)

1、用戶級線程和內核級線程的區別

1. 內核支持線程是OS內核可感知的,而用戶級線程是OS內核不可感知的。
2. 用戶級線程的創建、撤消和調度不需要OS內核的支持,是在語言(如Java)這一級處理的;而內核支持線程的創建、撤消和調度都需OS內核提供支持,而且與進程的創建、撤消和調度大體是相同的。
3. 用戶級線程執行系統調用指令時將導致其所屬進程被中斷,而內核支持線程執行系統調用指令時,只導致該線程被中斷。
4. 在只有用戶級線程的系統內,CPU調度還是以進程爲單位,處於運行狀態的進程中的多個線程,由用戶程序控制線程的輪換運行;在有內核支持線程的系統內,CPU調度則以線程爲單位,由OS的線程調度程序負責線程的調度。
5. 用戶級線程的程序實體是運行在用戶態下的程序,而內核支持線程的程序實體則是可以運行在任何狀態下的程序。

2、內核線程的優缺點

優點:當有多個處理機時,一個進程的多個線程可以同時執行。
缺點:由內核進行調度。

3、 用戶線程的優缺點

優點:

1. 線程的調度不需要內核直接參與,控制簡單。
2. 可以在不支持線程的操作系統中實現。
3. 創建和銷燬線程、線程切換代價等線程管理的代價比內核線程少得多。
4. 允許每個進程定製自己的調度算法,線程管理比較靈活。
5. 線程能夠利用的表空間和堆棧空間比內核級線程多。
6. 同一進程中只能同時有一個線程在運行,如果有一個線程使用了系統調用而阻塞,那麼整個進程都會被掛起。另外,頁面失效也會產生同樣的問題。

缺點:資源調度按照進程進行,多個處理機下,同一個進程中的線程只能在同一個處理機下分時複用

八、混合實現(瞭解)

用戶級與內核級的多路複用,內核統一調度內核線程,每個內核線程對應n個用戶線程
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章