【Linux 内核 内存管理】RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 )
文章目錄
- 一、RCU 機制
- 二、RCU 機制的優(yōu)勢與弊端
- 三、RCU 機制的鏈表應(yīng)用場景
一、RCU 機制
RCU , 英文全稱是 " Read-Copy-Update “ , 對應(yīng)的中文名稱是 ” 讀取-拷貝-更新 “ , 這是 Linux 內(nèi)核中的 ” 同步機制 " ;
Linux 內(nèi)核中還有其它同步機制 , 如 " 原子操作 " , " 讀寫信號量 " 等 " 鎖機制 " ;
RCU 機制 :
① 記錄指針 : RCU 會 記錄 所有的 指向 " 共享數(shù)據(jù) " 的 指針 ;
② 修改數(shù)據(jù) ( 讀取-拷貝 操作 ) : 如果 " 指針持有者 “ 修改該 ” 共享數(shù)據(jù) " , 需要先 創(chuàng)建一個共享數(shù)據(jù) " 副本 " , 然后在副本中修改 ;
③ 更新數(shù)據(jù) ( 更新操作 ) : 只需要讀取 " 共享數(shù)據(jù) " 的線程 , 離開 " 讀臨界區(qū) " 后 , 指向原來 " 共享數(shù)據(jù) " 的 指針 重新指向 " 副本 " , 然后再刪除原來的 " 共享數(shù)據(jù) " ;
二、RCU 機制的優(yōu)勢與弊端
RCU 的優(yōu)勢是 " 讀者 " ( 讀取共享數(shù)據(jù)的線程 ) 不需要承擔(dān)同步開銷 ,
同步開銷指的是 : ① 獲取 " 鎖 " , ② 執(zhí)行 " 原子指令 " , ③ 執(zhí)行 " 內(nèi)存屏障 " ;
與此相對的 RCU 機制也有一定弊端 , " 寫者 " ( 修改共享數(shù)據(jù)的線程 ) 需要 承擔(dān)很大的同步開銷 , 其需要
① 延遲對象釋放 ,
② 讀取 并 復(fù)制 共享數(shù)據(jù) ,
③ 必須使用 互斥鎖 機制 ;
三、RCU 機制的鏈表應(yīng)用場景
RCU 機制 可以極大地 提高 " 鏈表 " 數(shù)據(jù)結(jié)構(gòu)的 讀取效率 ,
多個線程 同時讀取 鏈表 時 , 使用 rcu_read_lock() 即可 ,
在多線程讀取的同時還允許有 111 個線程修改 鏈表 ;
RCU 機制 就是 " 讀取-拷貝-更新 " ,
上述 " 寫線程 " 修改 " 鏈表 " 數(shù)據(jù)結(jié)構(gòu) 的流程如下 :
① 首先 , 讀取 鏈表數(shù)據(jù) 內(nèi)容 ;
② 然后 , 拷貝 鏈表數(shù)據(jù) 到一個 " 副本 " 中 ;
③ 最后 , 更新 數(shù)據(jù) , 將 " 鏈表 " 的指針 指向 拷貝的 " 副本 " 中 , 刪除 原始鏈表數(shù)據(jù) ;
如果 " 寫線程 " 刪除 " 鏈表 " 數(shù)據(jù)結(jié)構(gòu) , 需要 等待 所有 訪問該 鏈表的 線程 訪問結(jié)束 , 即 釋放該鏈表指針 , 之后才能銷毀該鏈表 ;
總結(jié)
以上是生活随笔為你收集整理的【Linux 内核 内存管理】RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux 内核】线程调度示例一 ③
- 下一篇: 【Linux 内核 内存管理】RCU 机