歷史上線程的3種實現模型

来源:http://www.cnblogs.com/yuuyuu/archive/2016/01/18/5139620.html
-Advertisement-
Play Games

一.概述 這裡以Linux為例。Linux歷史上,最開始使用的線程是LinuxThreads,但LinuxThreads有些方面受限於內核的特性,從而違背了SUSV3 Pthreads標準。即它要根據內核的特性來實現線程,有些地方沒有遵循統一的標準。後...


一.概述                                                   

這裡以Linux為例。Linux歷史上,最開始使用的線程是LinuxThreads,但LinuxThreads有些方面受限於內核的特性,從而違背了SUSV3 Pthreads標準。即它要根據內核的特性來實現線程,有些地方沒有遵循統一的標準。後來IBM開發了NGPT(Next Generation POSIX Threads),性能明顯優於LinuxThreads,人們曾把它當作LinuxThreads的繼任者。但最後,又有一個項目NPTL(Native POSIX Threads Library)出來後,性能更優於NGPT。2002年NGPT項目停止開發,我們現在用的Linux線程就是NPTL。

線程的實現曾有3種模型:

1.多對一(M:1)的用戶級線程模型

2.一對一(1:1)的內核級線程模型

3.多對多(M:N)的兩級線程模型

上面的x對y(x:y)即x個用戶線程對應y個內核調度實體(Kernel Scheduling Entity,這個是內核分配CPU的對象單位)。

LinuxThreadsNPTL都是採用一對一的線程模型,NGPT採用的是多對多的線程模型!!!

二.多對一用戶線級程模型                      

多對一線程模型中,線程的創建、調度、同步的所有細節全部由進程的用戶空間線程庫來處理。用戶態線程的很多操作對內核來說都是透明的,因為不需要內核來接管,這意味不需要內核態和用戶態頻繁切換。線程的創建、調度、同步處理速度非常快。當然線程的一些其他操作還是要經過內核,如IO讀寫。這樣導致了一個問題:當多線程併發執行時,如果其中一個線程執行IO操作時,內核接管這個操作,如果IO阻塞,用戶態的其他線程都會被阻塞,因為這些線程都對應同一個內核調度實體。在多處理器機器上,內核不知道用戶態有這些線程,無法把它們調度到其他處理器,也無法通過優先順序來調度。這對線程的使用是沒有意義的!

三.一對一內核極線程模型                      

一對一模型中,每個用戶線程都對應各自的內核調度實體。內核會對每個線程進行調度,可以調度到其他處理器上面。當然由內核來調度的結果就是:線程的每次操作會在用戶態和內核態切換。另外,內核為每個線程都映射調度實體,如果系統出現大量線程,會對系統性能有影響。但該模型的實用性還是高於多對一的線程模型。

四.多對多兩極線程模型                          

多對多模型中,結合了1:1和M:1的優點,避免了它們的缺點。每個線程可以擁有多個調度實體,也可以多個線程對應一個調度實體。聽起來好像非常完美,但線程的調度需要由內核態和用戶態一起來實現。可想而知,多個對象操作一個東西時,肯定要一些其他的同步機制。用戶態和內核態的分工合作導致實現該模型非常複雜。NPTL曾經也想使用該模型,但它太複雜,要對內核進行大範圍改動,所以還是採用了一對一的模型!!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.概述 上一篇,介紹了互斥量。條件變數與互斥量不同,互斥量是防止多線程同時訪問共用的互斥變數來保護臨界區。條件變數是多線程間可以通過它來告知其他線程某個狀態發生了改變,讓等待在這個條件變數的線程繼續執行。通俗一點來講:設置一個條件變數讓線程1等待在一...
  • 命令簡介: 該命令用於密碼時效管理。它可以修改賬號和密碼的有效期。對於chage命令的描述如下所示: The chage command changes the number of days between password changes and the date of the last pass...
  • 一.概述 互斥量是線程同步的一種機制,用來保護多線程的共用資源。同一時刻,只允許一個線程對臨界區進行訪問。互斥量的工作流程:創建一個互斥量,把這個互斥量的加鎖調用放在臨界區的開始位置,解鎖調用放到臨界區的結束位置。當內核優先把某個線程調度到臨界區的開始...
  • 2016年最新64位win7系統快速版 V2016年1月軟體介紹2016年最新64位win7系統快速版 V2016年1月, 系統具有更安全、更穩定、更人性化等特點。集成最常用的裝機軟體,集成最全面的硬體驅動,精心挑選的系統維護工具,加上純凈版獨有人2016年最新32位win7系統快速版 V2016年...
  • 之前安裝 Microsoft Sql Server 2012 R2 的時候總是報這樣的錯誤:SQL Server Setup has encountered the following error:The SQL Server license agreement cannot be located ...
  • 一、簡介 Typist (gtypist)是一個打字練習軟體,用來提升打字的速度。 二、安裝 1)源碼方式 http://ftp.gnu.org/gnu/gtypist/ 三、使用 http://blog.chinaunix.net/uid-28503021-id-3944296.html 四、其他...
  • 作業要求:輸入用戶名,密碼認證成功顯示歡迎信息輸入錯誤三次後鎖定用戶Readme1.user_id.txt是存放用戶id及密碼的文件2.user_lock.txt是存放被鎖定的用戶id的文檔,預設為空.3.程式會對user_id.txt里的合法用戶id進行判斷,若連續輸入用戶id錯誤達三次程式直接退...
  • 今天,在用icinga伺服器端測試客戶端腳本時,報如下錯誤:[root@mysql-server1 etc]# /usr/local/icinga/libexec/check_nrpe -H 192.168.244.146 -c check_users -a 10 20CHECK_NRPE: Rec...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...