文章目錄
- 一.概念
- 二.線程帶來的變化
- 三.線程的屬性
- 四.使用者級線程和核心級線程
-
- 1.使用者級線程
- 2.核心級線程
- 3.兩者的關聯性
- 五.線程的實作方式
- 六.多線程模型
-
- 1.多對一模型
- 2.一對一模型
- 3.多對多模型
- 七.小結
一.概念
- 有的程序可能需要“同時”做很多事情,而傳統程序隻能串行的執行一系列程式。為此,引入了線程,來增加并發度
- 可以把線程了解為輕量級程序
- 線程是一個基本的CPU執行單元,也是程式執行流的最小單元
二.線程帶來的變化
- 程序隻是資源配置設定的基本機關,線程成為排程的基本機關
- 各線程間也可以并發,提高了并發性
- 線程間并發,如果是同一程序内的線程,則不需要切換程序環境,系統開銷減小
三.線程的屬性
- 線程是處理機排程的機關
- 多CPU計算機中,各個線程可以占用不同的CPU
- 每個線程都有一個線程控制塊(TCB)
- 線程也有運作,就緒,阻塞三種基本狀态
- 線程幾乎不擁有系統資源(因為引入線程以後,程序是資源配置設定的基本機關,線程隻是處理機排程的基本機關)
- 同一程序的不同線程共享程序的資源
- 由于共享記憶體空間位址,同一程序内的線程間進行通信甚至不需要系統幹預
- 同一程序中的線程切換,不會引起程序切換
- 不同程序中的線程切換,會引起程序切換
四.使用者級線程和核心級線程
1.使用者級線程
- 使用者級線程由應用程式通過線程庫實作
- 所有線程管理工作由應用程式負責
- 使用者級線程,線程切換可以在使用者态下完成,無需作業系統幹預
- 在使用者看來,是有多個線程,但是作業系統核心并意識不到使用者級線程的存在
2.核心級線程
- 核心級線程的管理工作都由作業系統核心完成
- 是以核心級線程的切換必須在核心态下才能完成
- 當有多個處理機時,一個程序的多個線程可以同時執行
- 核心級線程是作業系統核心可以感覺到的
3.兩者的關聯性
- 它們之間的差别在于性能
- 核心支援線程是OS核心可感覺的,而使用者級線程是OS核心不可感覺的
- 使用者級線程的建立、撤消和排程不需要OS核心的支援
- 使用者級線程執行系統調用指令時将導緻其所屬程序被中斷,而核心支援線程執行系統調用指令時,隻導緻該線程被中斷
- 在隻有使用者級線程的系統内,CPU排程還是以程序為機關,處于運作狀态的程序中的多個線程,由使用者程式控制線程的輪換運作;在有核心支援線程的系統内,CPU排程則以線程為機關,由OS的線程排程程式負責線程的排程
- 使用者級線程的程式實體是運作在使用者态下的程式,而核心支援線程的程式實體則是可以運作在任何狀态下的程式
五.線程的實作方式
- 在同時支援核心級線程和使用者級線程的系統中,可采用二者組合的方式:将n個使用者級線程映射到m個核心級線程(n>m)
-
由于作業系統隻感覺得到核心級線程,是以隻有核心級線程是處理機配置設定的機關
eg:
上圖中,該程序由兩個核心級線程和三個使用者級線程組成。在使用者看來,這個程序中有三個線程,但因為隻有兩個核心級線程,即使該程序在一個四核處理機上運作,也最多隻能配置設定到兩個核,最多有兩個使用者級線程并行執行。
六.多線程模型
1.多對一模型
- 多個使用者級線程映射到一個核心級線程
-
優點:
使用者級線程的切換可以直接在使用者态實作,不用切換到核心态,效率高
-
缺點:
當一個使用者級線程被阻塞時,整個程序都會被阻塞(因為多對一,對作業系統而言它隻能看到一個核心級程序,當一個使用者級線程阻塞了,該核心級程序也就阻塞了,作業系統就會去處理别的核心級線程),并發度不高。多個線程不可在多核處理機上并行運作。
2.一對一模型
- 一個使用者級線程映射到一個核心級線程
-
優點:
當一個線程阻塞時,别的線程還可以繼續執行,并發能力強,多線程可在多核處理機上并行執行
-
缺點:
一個使用者程序(注意這是程序)會占用多個核心級線程,線程切換由作業系統核心完成,需要切換到核心态,線程管理的成本高,開銷大。
3.多對多模型
- n個使用者級線程映射到m個核心級線程(n>m)
- 克服了多對一的并發性不高的問題,也克服了一對一開銷太大的缺點
七.小結
- 線程就是輕量級程序,就是把程序細分了
- 有了線程以後,線程就成為了排程的基本機關
- 使用者級線程就是使用者視角下的線程,與核心牽扯不是很大
- 核心級線程是作業系統核心視角下的線程,是由核心進行管理的
- 隻有核心級線程是處理機配置設定的機關,因為作業系統看不到使用者級線程