1. 程式人生 > >作業系統中的執行緒實現

作業系統中的執行緒實現

作業系統中的執行緒實現

一對一模型

每條使用者執行緒交由唯一對應的系統執行緒進行排程,在這種設計下建立執行緒和建立系統程序的代價是相同的。

多對一模型

多條使用者執行緒交由一條系統執行緒進行排程,這個系統執行緒也是唯一一條,所以無法適應多核環境,即使是在多核環境下也只能同時執行一條執行緒。

多對多模型

多條使用者執行緒對應多條系統執行緒,在多核環境下系統執行緒可以並行地進行運算。這種設計可以使得使用者執行緒的建立效率變高,但是導致系統核心設計的複雜性增加。

Linux中的執行緒和程序

Linux使用核外1對1執行緒模型,使用程序來模擬執行緒,把執行緒的排程交由唯一對應的系統執行緒,也就是說在Linux系統中使用者執行緒的本質即是系統執行緒也就是程序,執行緒的建立代價和程序是一樣的,區別只是同一個程序下的執行緒可以共享程序的記憶體空間。

  • 在linux中可以被核心呼叫的執行緒叫做程序。
  • 每一個程序有一個系統唯一指定的程序號(Process ID,PID)和一個執行緒組號(Thread Group ID,TGID)。
  • 程序分為兩類,一類是不包含TGID的普通程序,一類是包含TGID的執行緒型程序。
  • 如果一個執行緒型程序的PID=TGID,就被稱作是主執行緒。

windows中的執行緒和程序

windows同樣採用1對1的執行緒模型,在windows中一個程序表示一個基本CPU執行單位,但是程序本身只負責儲存程序資訊,程序本身不包含任何可執行程式碼,所有的執行程式碼都放線上程中。

總結

  • 建立執行緒無法達到節省建立時間的目的。
  • 每次切換執行緒都會從使用者態進入系統態,執行緒排程的上下文切換成本很高。

所以在程式中應該避免頻繁地建立和銷燬執行緒,也不應該在程式中同時保留過多的執行緒。