【Linux 内核 内存管理】RCU 机制 ② ( RCU 机制适用场景 | RCU 机制特点 | 使用 RCU 机制保护链表 )
文章目錄
- 一、RCU 機制適用場景
- 二、RCU 機制特點
- 三、使用 RCU 機制保護鏈表
一、RCU 機制適用場景
在上一篇博客 【Linux 內核 內存管理】RCU 機制 ① ( RCU 機制簡介 | RCU 機制的優勢與弊端 | RCU 機制的鏈表應用場景 ) 中 , 分析了 RCU 機制的優勢與弊端 ;
優勢 : RCU 的優勢是 " 讀者 " ( 讀取共享數據的線程 ) 不需要承擔同步開銷 ,
同步開銷指的是 : ① 獲取 " 鎖 " , ② 執行 " 原子指令 " , ③ 執行 " 內存屏障 " ;
弊端 : 與此相對的 RCU 機制也有一定弊端 , " 寫者 " ( 修改共享數據的線程 ) 需要 承擔很大的同步開銷 , 其需要
① 延遲對象釋放 ,
② 讀取 并 復制 共享數據 ,
③ 必須使用 互斥鎖 機制 ;
④ 使用復雜 , 比其它互斥鎖要復雜 ;
RCU 機制 適用于 " 讀者 " ( 讀取共享數據的線程 ) 性能要求高的場景 ;
二、RCU 機制特點
RCU 機制 只能 保護 " 動態分配 “ 的 ” 共享數據結構 " , 該 共享數據 必須 通過指針訪問 ,
這里的 動態分配 指的是 使用 malloc , calloc 等內存申請函數 , 申請的數據結構 , 不是棧內存數據結構 ;
RCU 機制保護的 " 臨界區 " ( 函數代碼塊 ) 中 , 不能執行耗時操作 , 尤其是 不能有 sleep 休眠操作 ;
讀寫不對稱 : RCU 機制 讀寫不對稱 , " 寫者 “ ( 修改共享數據的線程 ) 性能不作要求 , 可以高也可以低 , 但是 ” 讀者 " ( 讀取共享數據的線程 ) 性能要求很高 ;
三、使用 RCU 機制保護鏈表
RCU 機制 除了保護 普通指針 指向的數據 之外 , 還可以用于 保護 " 鏈表 " 數據結構 ;
Linux 內核中 , 提供了 一系列的 標準函數 , 可以 使用 " RCU 機制 " 保護 " 雙鏈表 " ;
標準鏈表元素 : 使用 RCU 機制 保護 的 鏈表 , 鏈表中的 標準 元素 , 仍然可以使用 ;
標準函數 RCU 變體 : 遍歷 , 修改 , 刪除 鏈表元素 時 , 需要調用 標準函數的 RCU 變體 ;
總結
以上是生活随笔為你收集整理的【Linux 内核 内存管理】RCU 机制 ② ( RCU 机制适用场景 | RCU 机制特点 | 使用 RCU 机制保护链表 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux 内核 内存管理】RCU 机
- 下一篇: 【Linux 内核 内存管理】RCU 机