寫屏障和讀屏障的區別是什么?


寫屏障(Write Barrier)與讀屏障(Read Barrier)的區別

在計算機科學中,寫屏障讀屏障是兩種關鍵的內存同步機制,主要用于解決并發編程中的可見性、有序性問題,或在垃圾回收(GC)中維護內存一致性。它們的核心區別在于觸發的操作類型、應用場景及實現目標。以下是詳細對比:


1. 定義與核心作用

類型定義核心作用
寫屏障寫操作前后插入的同步指令或邏輯,確保寫操作的順序性和可見性。防止寫操作重排序,確保其他線程能及時看到修改后的值。
讀屏障讀操作前后插入的同步指令或邏輯,確保讀操作的順序性和數據有效性。防止讀操作重排序,確保讀取的是最新值或符合預期的狀態。

2. 應用場景

(1) 并發編程中的內存屏障
  • 寫屏障

    • 場景:在多線程中,當一個線程修改共享變量后,需確保該修改對其他線程可見。
    • 實現
      在寫操作后插入StoreStoreStoreLoad屏障,強制將寫操作結果刷到主內存。
      示例volatile變量的寫操作會自動插入寫屏障。
      volatile int x = 1;
      // 寫操作后插入StoreLoad屏障,確保寫完成且后續讀能看到新值
      
  • 讀屏障

    • 場景:當一個線程讀取共享變量時,需確保讀取的是最新值,而非本地緩存的舊值。
    • 實現
      在讀操作前插入LoadLoadLoadStore屏障,強制從主內存重新加載數據。
      示例volatile變量的讀操作會自動插入讀屏障。
      int y = x; // 讀volatile變量x,插入LoadLoad屏障確保讀取最新值
      
(2) 垃圾回收(GC)中的屏障
  • 寫屏障(GC Write Barrier)

    • 場景:在并發標記或移動式GC(如G1、ZGC)中,跟蹤對象引用的修改,防止漏標或誤標。
    • 實現
      當程序修改對象A的引用指向對象B時,寫屏障記錄此次修改(如將B加入標記隊列)。
      示例:在CMS的并發標記階段,寫屏障用于記錄跨代引用。
  • 讀屏障(GC Read Barrier)

    • 場景:在增量式GC或并發壓縮(如Shenandoah)中,確保讀取的引用是有效的。
    • 實現
      當程序讀取對象引用時,讀屏障檢查該引用是否已被移動或無效,必要時觸發修復邏輯。
      示例:ZGC使用讀屏障實現染色指針,檢查引用是否指向有效地址。

3. 底層實現對比

維度寫屏障讀屏障
觸發時機寫操作(如賦值、字段更新)后觸發。讀操作(如加載變量、訪問字段)前觸發。
硬件指令對應StoreStoreStoreLoad屏障(如x86的mfence)。對應LoadLoadLoadStore屏障(如x86的lfence)。
性能開銷較高(需刷寫緩存到內存)。較低(僅需刷新本地緩存或加載最新值)。
典型應用- volatile
- 鎖釋放
- GC中的引用更新跟蹤
- volatile
- 鎖獲取
- GC中的引用有效性檢查

4. 實際案例

(1) Java中的volatile變量
  • 寫屏障

    volatile int sharedVar = 10;
    // 寫操作后插入StoreStore + StoreLoad屏障,確保:
    // 1. 當前線程的寫操作對其他線程可見。
    // 2. 禁止與后續操作重排序。
    
  • 讀屏障

    int value = sharedVar; // 讀操作前插入LoadLoad + LoadStore屏障,確保:
    // 1. 從主內存加載最新值。
    // 2. 禁止與之前操作重排序。
    
(2) 垃圾回收器中的屏障
  • G1 GC的寫屏障

    • 當對象A的字段從指向B改為指向C時,寫屏障將舊引用B和新引用C加入SATB(Snapshot-At-The-Beginning)隊列,供并發標記使用。
  • ZGC的讀屏障

    • 讀取對象引用時,檢查指針元數據(顏色標記),若對象已被移動,則通過讀屏障轉發到新地址。

5. 性能與權衡

類型優勢劣勢
寫屏障確保數據修改的及時可見性,避免其他線程讀取臟數據。頻繁寫操作時性能損耗較大(如大量volatile寫)。
讀屏障按需加載最新數據,減少不必要的內存同步開銷。讀操作可能延遲(需等待屏障邏輯完成)。

尾聲

  • 寫屏障:關注寫操作的有序性與可見性,用于同步數據修改、GC引用跟蹤等場景。
  • 讀屏障:關注讀操作的有序性與數據有效性,用于同步數據加載、GC引用檢查等場景。
  • 核心區別
    • 寫屏障解決“如何讓其他線程看到我的修改”問題。
    • 讀屏障解決“如何確保我讀到的是最新有效數據”問題。

在這里插入圖片描述

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

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

相關文章

ssh -T git@github.com 測試失敗解決方案:修改hosts文件

問題描述 通過SSH方式測試,使用該方法測試連接可能會遇到連接超時、端口占用的情況,原因是因為DNS配置及其解析的問題 ssh -T gitgithub.com我們可以詳細看看建立 ssh 連接的過程中發生了什么,可以使用 ssh -v命令,-v表示 verbo…

大疆無人機搭載樹莓派進行目標旋轉檢測

環境部署 首先是環境創建,創建虛擬環境,名字叫 pengxiang python -m venv pengxiang隨后激活環境 source pengxiang/bin/activate接下來便是依賴包安裝過程了: pip install onnxruntime #推理框架 pip install fastapi uvicorn[standard] #網絡請求…

00 Ansible簡介和安裝

1. Ansible概述與基本概念 1.1. 什么是Ansible? Ansible 是一款用 Python 編寫的開源 IT 自動化工具,主要用于配置管理、軟件部署及高級工作流編排。它能夠簡化應用程序部署、系統更新等操作,并且支持自動化管理大規模的計算機系統。Ansibl…

Linxu實驗五——NFS服務器

一.NFS服務器介紹 NFS服務器(Network File System)是一種基于網絡的分布式文件系統協議,允許不同操作系統的主機通過網絡共享文件和目錄3。其核心作用在于實現跨平臺的資源透明訪問,例如在Linux和Unix系統之間共享靜態數據&#…

『 測試 』測試基礎

文章目錄 1. 調試與測試的區別2. 開發過程中的需求3. 開發模型3.1 軟件的生命周期3.2 瀑布模型3.2.1 瀑布模型的特點/缺點 3.3 螺旋模型3.3.1 螺旋模型的特點/缺點 3.4 增量模型與迭代模型3.5 敏捷模型3.5.1 Scrum模型3.5.2 敏捷模型中的測試 4 測試模型4.1 V模型4.2 W模型(雙V…

紅外遙控鍵

紅外 本章節旨在讓用戶自定義紅外遙控功能,需要有板載紅外接收的板卡。 12.1. 獲取紅外遙控鍵值 由于不同遙控器廠家定義的按鍵鍵值不一樣,所以配置不通用,需要獲取實際按鍵對應的鍵值。 1 2 3 4 5 6 #設置輸出等級 echo 7 4 1 7> /pr…

同一個虛擬環境中conda和pip安裝的文件存儲位置解析

文章目錄 存儲位置的基本區別conda安裝的包pip安裝的包 看似相同實則不同的機制實際路徑示例這種差異帶來的問題如何檢查包安裝來源最佳實踐建議 總結 存儲位置的基本區別 conda安裝的包 存儲在Anaconda(或Miniconda)目錄下的pkgs和envs子目錄中: ~/anaconda3/en…

機器學習極簡入門:從基礎概念到行業應用

有監督學習(supervised learning) 讓模型學習的數據包含正確答案(標簽)的方法,最終模型可以對無標簽的數據進行正確處理和預測,可以分為分類與回歸兩大類 分類問題主要是為了“盡可能分開整個數據而畫線”…

split和join的區別?

split和join是Python中用于處理字符串的兩種方法,它們的主要區別在于功能和使用場景。? split()方法 ?split()方法用于將字符串按照指定的分隔符分割成多個子串,并返回這些子串組成的列表?。如果不指定分隔符,則默認分割所有的空白字符&am…

MySQL從入門到精通(二):Windows和Mac版本MySQL安裝教程

目錄 MySQL安裝流程 (一)、進入MySQL官網 (二)、點擊下載(Download) (三)、Windows和Mac版本下載 下載Windows版本 下載Mac版本 (四)、驗證并啟動MySQL …

LeetCode 解題思路 45(分割等和子集、最長有效括號)

解題思路: dp 數組的含義: 在數組中是否存在一個子集,其和為 i。遞推公式: dp[i] | dp[i - num]。dp 數組初始化: dp[0] true。遍歷順序: 從大到小去遍歷,從 i target 開始,直到 …

電影感戶外啞光人像自拍攝影Lr調色預設,手機濾鏡PS+Lightroom預設下載!

調色詳情 電影感戶外啞光人像自拍攝影 Lr 調色,是借助 Lightroom 軟件,針對戶外環境下拍攝的人像自拍進行后期處理。旨在模擬電影畫面的氛圍與質感,通過調色賦予照片獨特的藝術氣息。強調打造啞光效果,使畫面色彩不過于濃烈刺眼&a…

使用 NV?Ingest、Unstructured 和 Elasticsearch 處理非結構化數據

作者:來自 Elastic Ajay Krishnan Gopalan 了解如何使用 NV-Ingest、Unstructured Platform 和 Elasticsearch 為 RAG 應用構建可擴展的非結構化文檔數據管道。 Elasticsearch 原生集成了行業領先的生成式 AI 工具和提供商。查看我們的網絡研討會,了解如…

Android 13 使能user版本進recovery

在 debug 版本上,可以在關機狀態下,同時按 電源鍵 和 音量加鍵 進 recovery 。 user 版本上不行。 參考 使用 build 變體 debug 版本和 user 版本的差別之一就是 ro.debuggable 屬性不同。 順著這個思路追蹤,找到 bootable/recovery/reco…

每日算法刷題計劃

這是我每天堅持刷算法題的倉庫,每天刷1-3道,時間30-40min,加油! 目前考慮leetcode洛谷形式,c和python3語言,leetcode主要學核心思想,洛谷學會輸入輸出格式 每日打卡:markdowncsdn打卡 刷題策略: 按分類刷…

紅黑樹():

1. 紅黑樹: 紅黑樹從根節點開始的最長的路徑不會超過最短路徑的2倍。 紅黑樹的話,他的結點的分布沒有我們的AVL樹的結點的分布均衡,但是效率也不錯,AVL樹的結點分布的那么均勻,其實也是在進行了旋轉,付出了…

【AI智能推薦系統】第六篇:隱私保護與聯邦學習在推薦系統中的平衡之道

第六篇:隱私保護與聯邦學習在推薦系統中的平衡之道 提示語:?? “數據不出域,推薦更精準!深度揭秘騰訊、螞蟻集團如何用聯邦學習打造合規推薦系統,隱私計算技術全景解析與工業級實現方案!” 目錄 隱私保護的行業挑戰隱私計算技術體系 2.1 聯邦學習基礎架構2.2 差分隱私…

【Qt/C++】深入理解 Lambda 表達式與 `mutable` 關鍵字的使用

【Qt/C】深入理解 Lambda 表達式與 mutable 關鍵字的使用 在 Qt 開發中,我們常常會用到 lambda 表達式來編寫簡潔的槽函數。今天通過一個實際代碼示例,詳細講解 lambda 的語法、變量捕獲方式,特別是 mutable 的作用。 示例代碼 QPushButto…

記錄 ubuntu 安裝中文語言出現 software database is broken

搜索出來的結果是 sudo apt-get install language-pack-zh-han* 然而,無效,最后手動安裝如下 apt install language-pack-zh-hans apt install language-pack-zh-hans-base apt install language-pack-gnome-zh-hans apt install fonts-arphic-uming apt install libreoffic…

[虛幻官方教程學習筆記]深入理解實時渲染(An In-Depth Look at Real-Time Rendering)

原英文教程地址深入理解實時渲染(An In-Depth Look at Real-Time Rendering) 文章目錄 1.Intro to An In-Depth Look at Real-Time RenderingCPU VS GPUDeferred VS Forward 2. Before Rendering and OcclusionCulling計算的步驟使用console command:fre…