Linux線程與進程關系及底層實現

在操作系統中,線程切換相比進程切換更輕量級的關鍵原因之一是 緩存(Cache)的有效性,尤其是對 CPU 緩存(如 L1/L2/L3)和 TLB(Translation Lookaside Buffer)的影響。以下從緩存角度詳細分析這一差異:


1. 地址空間與 TLB 的影響

  • 進程切換
    • 進程擁有獨立的虛擬地址空間,切換時需要 切換頁表(Page Table),導致 TLB 被刷新或失效。
    • TLB 是緩存虛擬地址到物理地址映射的硬件組件,失效后需要重新加載映射條目,增加內存訪問延遲
  • 線程切換
    • 線程共享進程的地址空間,切換時無需切換頁表,TLB 條目保持有效
    • 減少因 TLB 失效導致的性能損失,內存訪問效率更高

2. CPU 緩存的局部性保留

  • 進程切換
    • 進程間數據隔離,新進程的代碼和數據與舊進程的緩存內容(如 L1/L2/L3)無重疊
    • 緩存中舊進程的數據對新進程無用,導致 緩存冷啟動(Cache Cold Start),需重新加載數據到緩存,增加延遲。
  • 線程切換
    • 線程共享進程的代碼段、數據段和堆內存,切換后新線程訪問的代碼和數據 可能仍在緩存中(尤其是共享的 L3 緩存)。
    • 緩存命中率更高,減少訪問主存的次數,降低延遲

3. 上下文切換的數據量差異

  • 進程切換
    • 需要保存和恢復 完整的上下文,包括寄存器狀態、頁表指針、文件描述符表、信號處理表等。
    • 上下文數據量大,切換時需 頻繁讀寫內存,對緩存造成壓力。
  • 線程切換
    • 僅需保存和恢復 線程獨有資源(如棧指針、寄存器狀態、線程本地存儲)。
    • 共享的資源(如內存、文件描述符)無需切換,數據量更小,對緩存更友好。

4. 緩存一致性協議的影響

  • 多核 CPU 中,不同線程可能運行在不同核心上:
    • 進程切換
      • 若新進程的線程被調度到不同核心,原核心的緩存數據無法復用,需通過緩存一致性協議(如 MESI)同步或重新加載,增加總線流量
    • 線程切換
      • 同一進程的線程共享數據,即使跨核心調度,其他核心的 L3 緩存可能已緩存共享數據,減少數據同步開銷

5. 寫時復制(Copy-on-Write)的優化

  • 進程創建
    • fork() 使用寫時復制技術,父子進程共享內存直到發生寫入操作。雖然減少了內存拷貝,但首次寫入會觸發頁復制,可能 污染緩存(新頁需要加載到緩存)。
  • 線程創建
    • 線程直接共享進程內存,無寫時復制開銷,緩存內容保持連貫性

6. 實際性能對比

通過實驗可以觀察到以下現象:

  1. 緩存局部性優勢
    • 線程切換后,若新線程訪問的數據與舊線程有重疊(如共享的全局變量),緩存命中率顯著高于進程切換。
  2. TLB 未命中率
    • 進程切換后,TLB 未命中率可能驟增(需重新加載頁表條目),而線程切換的 TLB 未命中率幾乎不變。

總結

線程切換更輕量級的本質在于 緩存和 TLB 的有效性保留

  1. 共享地址空間:避免 TLB 刷新和頁表切換,減少內存訪問延遲。
  2. 緩存局部性保留:共享數據可能已緩存在 L3 或跨核緩存中,減少冷啟動開銷。
  3. 上下文數據量小:減少對緩存的污染和內存帶寬的占用。

因此,在高并發場景(如 Web 服務器、數據庫)中,線程的輕量級切換特性使其更適合作為并發的基本單位,尤其在多核 CPU 和緩存層次結構復雜的現代計算機中,優勢更加顯著。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/908803.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/908803.shtml
英文地址,請注明出處:http://en.pswp.cn/news/908803.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【論文閱讀30】Bi-LSTM(2024)

用于精確實時滑坡檢測的雙向LSTM模型:以印度梅加拉亞邦毛永格里姆為例的研究 IEEE Internet of Things Journal(簡稱 IoT?J)是一份 IEEE 自 2014 年起雙月刊發表的國際頂級學術期刊,專注于物聯網各領域的研究。 作者&#xff1a…

Java編程之原型模式

原型模式的定義 原型模式(Prototype Pattern)是一種創建型設計模式,通過復制已有對象來創建新對象,而非通過常規的手段的new關鍵字來實例化。適用于對象創建成本較高或需要動態配置的場景。 例如,在一個游戲開發中&am…

RAG質量評估

當完成了一個RAG系統的開發工作以后,還需要對該系統的性能進行評估。如何對RAG系統的性能進行評估呢?仔細分析RAG系統的產出成果,主要涉及以下幾點: (1)檢索器組件 檢索的相關文檔 context, (…

LLMs基礎學習(八)強化學習專題(1)

LLMs基礎學習(八)強化學習專題(1) 文章目錄 LLMs基礎學習(八)強化學習專題(1)學習資料資源強化學習是什么強化學習一句話精準定義 強化學習與其他學習類型的對比強化學習 vs 監督學習…

19-Oracle 23 ai Database Sharding-知識準備

小伙伴是不是經常遇見大規模集群和數量的時候,業務就提出要對數據進行sharding。 Oracle 和其他數據庫(如 MySQL、PostgreSQL、MongoDB 等) 為什么要進行分片(sharding),分片的原因是什么,實現…

分類與邏輯回歸 - 一個完整的guide

線性回歸和邏輯回歸其實比你想象的更相似 😃 它們都是所謂的參數模型。讓我們先看看什么是參數模型,以及它們與非參數模型的區別。 線性回歸 vs 邏輯回歸 線性回歸:用于回歸問題的線性參數模型。邏輯回歸:用于分類問題的線性參數…

英語寫作中“每一個”each individual、every individual、every single的用法

一、Individual :個體,相對于團體,例如: Individual competition (個人比賽),相對于team competition (團體比賽) Individual users (個人用戶)…

由于 z(x,y) 的變化導致的影響(那部分被分給了鏈式項)

? 本質問題:為什么鏈式法則中 ? F ? x \frac{\partial F}{\partial x} ?x?F? 不考慮 z z ( x , y ) zz(x,y) zz(x,y)? 🔍 一、關鍵是:偏導數的定義是什么? 我們從最根本的定義開始: ? F ( x , y…

python打卡day44@浙大疏錦行

知識點回顧: 預訓練的概念常見的分類預訓練模型圖像預訓練模型的發展史預訓練的策略預訓練代碼實戰:resnet18 作業: 嘗試在cifar10對比如下其他的預訓練模型,觀察差異,盡可能和他人選擇的不同嘗試通過ctrl進入resnet的…

十一(3) 類,加深對拷貝構造函數的理解

class ClassName { public: // 拷貝構造函數:參數是同類型對象的引用(通常為 const 引用) ClassName(const ClassName& other) { // 復制 other 的成員變量到當前對象 } }; 參數要求:必須是同類型對象的引用&#xff0…

網頁后端開發(基礎1--maven)

maven的作用: Maven是一款管理和構建Java項目的工具。 1.依賴管理: 方便快捷的管理項目依賴的資源(jar包) 不用手動下載jar包,只需要中maven中引用,maven會查找本地倉庫。若本地倉庫沒有,會直…

認識電子元器件---高低邊驅動

目錄 一、基本概念 二、關鍵參數對比 三、工作原理 (1)高邊驅動 (2)低邊驅動 四、典型的應用場景 五、如何選擇 一、基本概念 可以理解成:高低邊驅動是MOS/IGBT的一種應用方式 高低邊驅動是電路拓撲概念&#…

JavaScript 標簽加載

目錄 JavaScript 標簽加載script 標簽的 async 和 defer 屬性,分別代表什么,有什么區別1. 普通 script 標簽2. async 屬性3. defer 屬性4. type"module"5. 各種加載方式的對比6. 使用建議 JavaScript 標簽加載 script 標簽的 async 和 defer …

C/CPP 結構體、聯合體、位段內存計算 指南

C/CPP 結構體、聯合體、位段內存計算 指南 在C語言中,結構體、聯合體和位段是對數據的高級抽象,它們可以讓程序員以更易于理解的方式來操作復雜的數據結構。然而,這些結構在內存中的布局可能并不如它們的語法結構那樣直觀,特別是當…

ASR(語音識別)語音/字幕標注 通過via(via_subtitle_annotator)

文章目錄 1 VIA 官網資料2 語音/字幕標注3 鍵盤快捷鍵常規當一個時間片段被選中時圖像或視頻幀中的空間區域 1 VIA 官網資料 VIA官網:https://www.robots.ox.ac.uk/~vgg/software/via/ VIA官網標注示例:https://www.robots.ox.ac.uk/~vgg/software/via/…

mq安裝新版-3.13.7的安裝

一、下載包,上傳到服務器 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-generic-unix-3.13.7.tar.xz 二、 erlang直接安裝 rpm -ivh erlang-26.2.4-1.el8.x86_64.rpm不需要配置環境變量,直接就安裝了。 erl…

高通平臺PCIE EP模式log丟失問題

高通平臺PCIE EP模式log丟失問題 1 問題背景2 問題分析2.1 對比USB2.1.1 Logtool優化2.1.2 Device mhi與fs對比2.2 優化方案2.2.1 Diag系統優化2.2.2 Host mhi優化3 最終成果1 問題背景 高通5G模組如SDX55\SDX62\SDX65\SDX72\SDX75等支持pcie ep模式。會通過pcie與host(如MT7…

Python應用輸入輸出函數

大家好!在 Python 編程中,輸入輸出函數是與用戶進行交互的橋梁。通過輸入函數,我們可以獲取用戶的輸入數據;通過輸出函數,我們可以向用戶展示程序的運行結果。對于初學者來說,掌握基本的輸入輸出操作是編程入門的重要一…

如何使用 Ansible 在 Ubuntu 24.04 上安裝和設置 LNMP

在當今世界,自動化是有效管理和部署 Web 應用程序的關鍵。Ansible 是一個強大的自動化工具,它是一款開源軟件配置、配置管理和應用程序部署工具。本文將指導您使用 Ansible 在 Ubuntu 服務器上安裝 LNMP 堆棧(Linux、Nginx、MySQL、PHP)。 先決條件 為了執行本指南中討論的…

Xela矩陣三軸觸覺傳感器的工作原理解析與應用場景

Xela矩陣三軸觸覺傳感器通過先進技術模擬人類觸覺感知,幫助設備實現精確的力測量與位移監測。其核心功能基于磁性三維力測量與空間位移測量,能夠捕捉多維觸覺信息。該傳感器的設計不僅提升了觸覺感知的精度,還為機器人、醫療設備和制造業的智…