緩存一致性協議的影響

在操作系統中,線程切換相比進程切換更輕量級的關鍵原因之一是 緩存(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/web/82171.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82171.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82171.shtml

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

相關文章

六月一日python-AI代碼

python 運行 import turtle as t # 導入turtle庫并簡稱為t,用于圖形繪制 import random # 導入random庫,用于隨機數生成t.delay(0) # 設置繪圖延遲為0,加快繪圖速度 colors ["red", "blue", "gr…

58、辣椒種植學習

辣椒(學名:Capsicum annuum)屬于茄科辣椒屬,是一種重要的蔬菜兼調味作物,具有較高的經濟價值和營養價值。其果實富含維生素C、辣椒素等成分,既可鮮食,也可加工成干辣椒、辣椒粉、辣椒醬等產品&a…

C語言進階--程序的編譯(預處理動作)+鏈接

1.程序的翻譯環境和執行環境 在ANSI C標準的任何一種實現中,存在兩種不同的環境。 第一種是翻譯環境:將源代碼轉換為可執行的機器指令(0/1); 第二種是執行環境:用于實際執行代碼。 2.詳解編譯鏈接 2.1翻譯環境 程…

微調大模型:什么時候該做,什么時候不該做?

目錄 一、什么是“微調”?你真的需要它嗎? 二、什么時候不該微調? 🚫 不該微調的 5 個典型場景: 1. 通用問答、閑聊、常識類內容 2. 企業內部問答 / 文檔助手 3. 想要通過微調“學會格式” 4. 沒有大量高質量標…

微深節能 碼頭裝卸船機定位與控制系統 格雷母線

微深節能碼頭裝卸船機定位與控制系統:格雷母線技術賦能港口作業智能化升級 在現代化港口散貨裝卸作業中,裝卸船機是連接船舶與陸域運輸的核心樞紐設備。傳統裝卸船機依賴人工操作,存在定位偏差大、動態協同難、安全風險高等痛點。微深節能基于…

如何檢查popover氣泡組件樣式?調試懸停元素CSS樣式的解決方案

1. 問題 當我們要檢查這種彈出層的CSS樣式時,會發現特別棘手,因為鼠標移走就消失了。如果是display:none控制的,可能還能找到,如果是用js通過v-if控制的,就無法調試了。 2. 解決方案 使用 setTimeout debugger 就…

網絡攻防技術一:緒論

文章目錄 一、網絡空間CyberSpace1、定義2、基本四要素 二、網絡空間安全1、定義2、保護對象3、安全屬性4、作用空間 三、網絡攻擊1、攻擊分類2、攻擊過程 四、網絡防護1、定義2、安全模型3、安全服務5類4、特定安全機制8種5、普遍性安全機制5種 五、網絡安全技術發展簡史1、第…

徹底理解Spring三級緩存機制

文章目錄 前言一、Spring解決循環依賴時,為什么要使用三級緩存? 前言 Spring解決循環依賴的手段,是通過三級緩存: singletonObjects:存放所有生命周期完整的單例對象。(一級緩存)earlySingleto…

【 SpringCloud | 微服務 網關 】

單體架構時我們只需要完成一次用戶登錄、身份校驗,就可以在所有業務中獲取到用戶信息。而微服務拆分后,每個微服務都獨立部署,這就存在一些問題: 每個微服務都需要編寫登錄校驗、用戶信息獲取的功能嗎? 當微服務之間調…

【前端面經】字節跳動一面

寫在前面:面經只是記錄博主遇到的題目。每題的答案在編寫文檔的時候已經有問過deepseek,它只是一種比較普世的答案,要學得深入還是靠自己 Q:三欄布局的實現方式(圣杯模型)如何實現 A: /* 整個 …

ST-GCN

1.bash 安裝git 在目錄下右鍵使用git bash打開 需要安裝wgetbash download_model.sh,下載.sh文件 wget: command not found,Windows系統使用git命令 下載預訓練權重_sh文件下載-CSDN博客 bash tools/get_models.sh 生成了三個.pt文件

計算機網絡全維度解析:架構協議、關鍵設備、安全機制與新興技術深度融合

計算機網絡作為當今數字化社會的基石,其復雜性和應用廣泛性遠超想象。本文將從基礎架構、協議體系、關鍵設備、安全機制到新興技術,進行全方位、深層次的解析,并輔以實際應用場景和案例分析。 一、網絡架構與分類的深度剖析 1.1 網絡分類的立…

大語言模型的推理能力

2025年,各種會推理的AI模型如雨后春筍般涌現,比如ChatGPT o1/o3/o4、DeepSeek r1、Gemini 2 Flash Thinking、Claude 3.7 Sonnet (Extended Thinking)。 對于工程上一些問題比如復雜的自然語言轉sql,我們可能忍受模型的得到正確答案需要更多…

黑馬程序員C++核心編程筆記--3 函數高級

3.1 函數默認參數 本節內容之前已經整理過,詳見22.函數的默認值 3.2 函數占位參數 C中函數的形參列表里可以有占位參數,用來做占位,調用函數時必須補填該位置 語法: 返回值類型 函數名 (數據類型) {} 在現階段函數的占位參數…

數據倉庫分層 4 層模型是什么?

企業每天都在產生和收集海量數據。然而,面對這些數據,許多企業卻陷入了困境:如何高效管理、處理和分析這些數據?如何從數據中提取有價值的信息來支持業務決策?這些問題困擾著眾多數據分析師和 IT 管理者。 在眾多架構…

Java正則表達式完全指南

Java正則表達式完全指南 一、正則表達式基礎概念1.1 什么是正則表達式1.2 Java中的正則表達式支持 二、正則表達式基本語法2.1 普通字符2.2 元字符2.3 預定義字符類 三、Java中正則表達式的基本用法3.1 編譯正則表達式3.2 創建Matcher對象并執行匹配3.3 常用的Matcher方法 四、…

緩存擊穿、緩存雪崩、緩存穿透以及數據庫緩存雙寫不一致問題

在項目中,我們所需要的數據通常存儲在數據庫中,但是數據庫的數據保存在硬盤上,硬盤的讀寫操作很慢,為了避免直接訪問數據庫,我們可以使用 Redis 作為緩存層,緩存通常存儲在內存中,內存的讀寫速度…

可靈2.1 vs Veo 3:AI視頻生成誰更勝一籌?

在Google發布Veo 3幾天后,可靈顯然感受到了壓力,發布了即將推出的視頻模型系列可靈 2.1的早期體驗版。 據我了解,有三種不同的模式: 可靈 2.1 標準模式: 720p分辨率 僅支持圖像轉視頻(生成更快,一致性更好) 5秒視頻仍需20積分 可靈 2.1 專業模式: 1080p分辨率 僅在圖…

解決Docker存儲空間不足問題

虛擬機磁盤擴展實戰:解決Docker存儲空間不足問題 問題背景 在虛擬機中運行的Linux系統上,Docker服務因根分區空間不足而無法正常運行。初始狀態如下: [rootlocalhost ~]# df -h / 文件系統 容量 已用 可用 已用% 掛載點…

Redis 中如何保證緩存與數據庫的數據一致性?

在 Redis 中保證緩存與數據庫的數據一致性,需結合業務場景選擇以下策略: 核心策略總結 Cache Aside(旁路緩存)模式 讀操作:先查緩存,未命中則查數據庫并寫入緩存。寫操作:先更新數據庫&#xf…