在使用者空間中實現執行緒

2021-06-06 20:23:42 字數 969 閱讀 7699

有兩種主要的方法實現執行緒包:在使用者空間中和在核心中。前者是把整個執行緒包放在使用者空間中,核心對執行緒包一無所知,仍按正常的單執行緒程序方式管理。

在使用者空間中實現執行緒包的優點:

(1)

使用者級執行緒包可以在不支援執行緒的作業系統上實現。

(2)

(3)

允許每個程序有自己定製的排程演算法。

(4)

具有較好的可擴充套件性,這是因為在核心空間中核心執行緒需要一些固定**空間和堆疊空間,當核心執行緒的數量非常大,就會出現問題。

在使用者空間中實現執行緒包的缺點:

(1)

(2)

在乙個單獨的程序內部,沒有時鐘中斷,所以不能用輪轉排程的方式排程執行緒。如果乙個執行緒開始執行,那麼在該程序中的其他執行緒就不能執行,除非第乙個執行緒自動放棄cpu。

3.2

在核心中實現執行緒包

在核心中實現執行緒,此時不再需要執行時系統。另外,每個程序中也沒有執行緒表,相反,在核心中用來記錄系統中所有執行緒的執行緒表。當乙個執行緒阻塞時,核心可以根據其選擇,可以執行同乙個程序中的另乙個執行緒,或者執行另乙個程序中的執行緒。而在使用者級執行緒中,執行時系統始終執行自己程序中的執行緒,直到核心剝奪它的cpu為止。

核心級執行緒的缺點是:應用程式執行緒在使用者態執行,而執行緒排程和管理在核心實現。在同一程序中,控制權從乙個執行緒轉移到另乙個執行緒,需要使用者態-核心態-使用者態的模式切換,系統開銷較大。

綜上:使用者級執行緒和核心級執行緒之間的差別在於效能。使用者級執行緒的切換需要少量的機器指令,而核心級執行緒需要完整的上下文切換,修改記憶體映像,使快取記憶體失效,這導致了若干數量級的延遲。另一方面,在使用核心級執行緒時,一旦執行緒阻塞在i/o就不需要像在使用者級執行緒中那樣將整個程序掛起。

採用混合式執行緒,核心只識別核心級執行緒,並對其進行排程。其中一些核心級執行緒會被多個使用者級執行緒多路復用,在這種模型中,每個核心級執行緒有乙個可以輪流使用的使用者級執行緒集合。

使用者空間實現執行緒 核心實現執行緒 執行緒的排程

1 在使用者空間中實現執行緒 1 特點 把整個執行緒包放在使用者空間,核心對執行緒包一無所知。從核心角度考慮,就是按正常的方式管理,即單執行緒程序 存在執行時系統 2 優點 1 使用者級執行緒包可以在不支援執行緒的作業系統上實現。2 進而,它 可以呼叫執行緒排程程式來選擇另乙個要執行的執行緒 儲存該...

怎麼在Oracle表空間中建使用者

oracle安裝完後,其中有乙個預設的資料庫,除了這個預設的資料庫外,我們還可以建立自己的資料庫。對於初學者來說,為了避免麻煩,可以用 database configuration assistant 嚮導來建立資料庫。建立完資料庫後,並不能立即在資料庫中建表,必須先建立該資料庫的使用者,並且為該使...

Linux 核心空間與使用者空間實現與分析

本文以 32 位系統為例介紹核心空間 kernel space 和使用者空間 user space 核心空間和使用者空間 對 32 位作業系統而言,它的定址空間 虛擬位址空間,或叫線性位址空間 為 4g 2的32次方 也就是說乙個程序的最大位址空間為 4g。作業系統的核心是核心 kernel 它獨立...