国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

并行程序設計中最重要的鎖-RCU鎖

開關電源芯片 ? 來源:極客重生 ? 作者: Alex碼農的藝術 ? 2021-08-27 14:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

hi,大家好,今天給大家分享并行程序設計中最重要的鎖-RCU鎖,RCU鎖本質是用空間換時間,是對讀寫鎖的一種優化加強,但不僅僅是這樣簡單,RCU體現出來的垃圾回收思想,也是值得我們學習和借鑒,。

各個語言C, C++,Java, go等都有RCU鎖實現,同時內核精巧的實現也是學習代碼設計好素材,深入理解RCU分為兩個部分,第一部分主要是講核心原理,理解其核心設計思想,對RCU會有個宏觀的理解;第二部分會分析源碼實現(本來準備放在一起,由于實現相當精巧,篇幅會很多,就單獨成一篇),希望大家喜歡。

并行程序設計演進如何正確有效的保護共享數據是編寫并行程序必須面臨的一個難題,通常的手段就是同步。同步可分為阻塞型同步(Blocking Synchronization)和非阻塞型同步( Non-blocking Synchronization)。

阻塞型同步是指當一個線程到達臨界區時,因另外一個線程已經持有訪問該共享數據的鎖,從而不能獲取鎖資源而阻塞(睡眠),直到另外一個線程釋放鎖。常見的同步原語有 mutex、semaphore 等。如果同步方案采用不當,就會造成死鎖(deadlock),活鎖(livelock)和優先級反轉(priority inversion),以及效率低下等現象。

為了降低風險程度和提高程序運行效率,業界提出了不采用鎖的同步方案,依照這種設計思路設計的算法稱為非阻塞型同步,其本質就是停止一個線程的執行不會阻礙系統中其他執行實體的運行。

先有阻塞型同步

互斥鎖(英語:Mutual exclusion,縮寫Mutex)是一種用于多線程編程中,防止兩條線程同時對同一公共資源進行讀寫的機制。該目的通過將代碼切片成一個一個的臨界區域(critical section)達成。臨界區域指的是一塊對公共資源進行存取的代碼。

信號量(Semaphore),是在多線程環境下使用的一種設施,是可以用來保證兩個或多個關鍵代碼段不被并發調用,可以認為mutex是0-1信號量;

讀寫鎖是計算機程序的并發控制的一種同步機制,它把對共享資源的訪問者劃分成讀者和寫者,讀者只對共享資源進行讀訪問,寫者則需要對共享資源進行寫操作,讀操作可并發重入,寫操作是互斥的。

再有非阻塞型同步

當今比較流行的非阻塞型同步實現方案有三種:

Wait-free(無等待)

Wait-free 是指任意線程的任何操作都可以在有限步之內結束,而不用關心其它線程的執行速度。Wait-free 是基于 per-thread 的,可以認為是 starvation-free 的。非常遺憾的是實際情況并非如此,采用 Wait-free 的程序并不能保證 starvation-free,同時內存消耗也隨線程數量而線性增長。目前只有極少數的非阻塞算法實現了這一點。

簡單理解:任意時刻所有的線程都在干活;

Lock-free(無鎖)

Lock-Free是指能夠確保執行它的所有線程中至少有一個能夠繼續往下執行。由于每個線程不是 starvation-free 的,即有些線程可能會被任意地延遲,然而在每一步都至少有一個線程能夠往下執行,因此系統作為一個整體是在持續執行的,可以認為是 system-wide 的。所有 Wait-free 的算法都是 Lock-Free 的。

簡單理解:任意時刻至少一個線程在干活;

Obstruction-free(無障礙)

Obstruction-free 是指在任何時間點,一個孤立運行線程的每一個操作可以在有限步之內結束。只要沒有競爭,線程就可以持續運行。一旦共享數據被修改,Obstruction-free 要求中止已經完成的部分操作,并進行回滾。所有 Lock-Free 的算法都是 Obstruction-free 的。

簡單理解:只要數據有修改,就會重新獲取,并且把已經完成操作回滾重來;

綜上所述,不難得出 Obstruction-free 是 Non-blocking synchronization 中性能最差的,而 Wait-free 性能是最好的,但實現難度也是最大的,因此 Lock-free 算法開始被重視,并廣泛運用于各種程序設計中,這里主要介紹Lock_free算法。

lock-free(無鎖)往往可以提供更好的性能和伸縮性保證,但實際上其優點不止于此。早期這些概念首先是在操作系統上應用的,因為一個不依賴于鎖的算法,可以應用于各種場景下,而無需考慮各種錯誤,故障,失敗等情形。比如死鎖,中斷,甚至CPU失效。

主流無鎖技術

Atomic operation(原子操作),在單一、不間斷的步驟中讀取和更改數據的操作。需要處理器指令支持原子操作:

● test-and-set (TSR)

● compare-and-swap (CAS)

● load-link/store-conditional (ll/sc)

Spin Lock(自旋鎖)是一種輕量級的同步方法,一種非阻塞鎖。當 lock 操作被阻塞時,并不是把自己掛到一個等待隊列,而是死循環 CPU 空轉等待其他線程釋放鎖。

Seqlock (順序鎖) 是Linux 2.6 內核中引入一種新型鎖,它與 spin lock 讀寫鎖非常相似,只是它為寫者賦予了較高的優先級。也就是說,即使讀者正在讀的時候也允許寫者繼續運行,讀者會檢查數據是否有更新,如果數據有更新就會重試,因為 seqlock 對寫者更有利,只要沒有其他寫者,寫鎖總能獲取成功。

RCU(Read-Copy Update),顧名思義就是讀-拷貝修改,它是基于其原理命名的。對于被RCU保護的共享數據結構,讀者不需要獲得任何鎖就可以訪問它,但寫者在訪問它時首先拷貝一個副本,然后對副本進行修改,最后使用一個回調(callback)機制在適當的時機把指向原來數據的指針替換為新的被修改的數據。這個時機就是所有引用該數據的CPU都退出對共享數據的訪問。

本文主要講解RCU的核心原理。

歷史背景高性能并行程序中,數據一致性訪問是一個非常重要的部分,一般都是采用鎖機制(semaphore、spinlock、rwlock等)進行保護共享數據,根本的思想就是在訪問臨界資源時,首先訪問一個全局的變量(鎖),通過全局變量的狀態來控制線程對臨界資源的訪問。但是,這種思想是需要硬件支持的,硬件需要配合實現全局變量(鎖)的讀-修改-寫,現代CPU都會提供這樣的原子化指令。

采用鎖機制實現數據訪問的一致性存在如下兩個問題:

效率問題。鎖機制的實現需要對內存的原子化訪問,這種訪問操作會破壞流水線操作,降低了流水線效率,這是影響性能的一個因素。另外,在采用讀寫鎖機制的情況下,寫鎖是排他鎖,無法實現寫鎖與讀鎖的并發操作,在某些應用下會降低性能。

擴展性問題。例如,當系統中CPU數量增多的時候,采用鎖機制實現數據的同步訪問效率偏低。并且隨著CPU數量的增多,效率降低,由此可見鎖機制實現的數據一致性訪問擴展性差。

原始的RCU思想

在多線程場景下,經常我們需要并發訪問一個數據結構,為了保證線程安全我們會考慮使用互斥設施來進行同步,更進一步我們會根據對這個數據結構的讀寫比例而選用讀寫鎖進行優化。但是讀寫鎖不是唯一的方式,我們可以借助于COW技術來做到寫操作不需要加鎖,也就是在讀的時候正常讀,寫的時候,先加鎖拷貝一份,然后進行寫,寫完就原子的更新回去,使用COW實現避免了頻繁加讀寫鎖本身的性能開銷。

優缺點

由于 RCU 旨在最小化讀取端開銷,因此僅在以更高速率使用同步邏輯進行讀取操作時才使用它。如果更新操作超過10%,性能反而會變差,所以應該選擇另一種同步方式而不是RCU。

好處

幾乎沒有讀取端開銷。零等待,零開銷

沒有死鎖問題

沒有優先級倒置問題(優先級倒置和優先級繼承)

無限制延遲沒有問題

無內存泄漏風險問題

缺點

使用起來有點復雜

對于寫操作,它比其他同步技術稍慢

適用場景

核心原理理論基礎-QSBR算法

(Quiescent State-Based Reclamation)

這個算法的核心思想就是識別出線程的不活動(quiescent)狀態,那么什么時候才算是不活動的狀態呢?這個狀態和臨界區狀態是相對的,線程離開臨界區就是不活動的狀態了。識別出不活動狀態了,還需要把狀態通知出去,讓其他線程知道,這整個過程可以用下面的圖來描述:

上面有四個線程,線程1執行完更新操作后添加了釋放內存的callback,此時線程2,3,4都讀取的是之前的內容,等他們執行完成后分別回去調用onQuiescentState來表明自己已經不不活動了,等到最后一個線程調用onQuiescentState的時候就可以去調用注冊的callback了。

要實現上面這個過程其要點就是選擇適合的位置執行onQuiescentState,還有就是如何知道誰是最后一個執行onQuiescentState的線程。

批量回收,如果更新的次數比較多的話,但是每次只回調一個callback,釋放一次內存就會導致內存釋放跟不上回收的速度,為此需要進行批量回收,每次更新都會注冊新的callback,當第一次所有的線程都進入不活動狀態的時候就把當前的所有callback保存起來,等待下一次所有線程進入不活動的狀態的時候就回調前一次所有的callback。

基本架構

Linux 內核RCU 參考QSBR算法設計一套無鎖同步機制。

多個讀者可以并發訪問共享數據,而不需要加鎖;

寫者更新共享數據時候,需要先copy副本,在副本上修改,最終,讀者只訪問原始數據,因此他們可以安全地訪問數據,多個寫者之間是需要用鎖互斥訪問的(比如用自旋鎖);

修改資源后,需要更新共享資源,讓后面讀者可以訪問最新的數據;

等舊資源上所有的讀者都訪問完畢后,就可以回收舊資源了;

RCU 模型

Removal:在寫端臨界區部分,讀?。≧ead()),進行復制(Copy),并執行更改(Update)操作;

Grace Period:這是一個等待期,以確保所有與執行刪除的數據相關的reader訪問完畢;

Reclamation:回收舊數據;

三個重要概念

靜止狀態QS(Quiescent State): CPU發生了上下文切換稱為經歷一個quiescent state;

寬限期GP(Grace Period): grace period就是所有CPU都經歷一次quiescent state所需要的等待的時間,也即系統中所有的讀者完成對共享臨界區的訪問;

讀側臨界部分RCS(Read-Side Critical Section): 保護禁止其他CPU修改的代碼區域,但允許多個CPU同時讀;

三個主要的角色

讀者reader:

安全訪問臨界區資源;

負責標識進出臨界區;

寫者updater:

復制一份數據,然后更新數據;

用新數據覆蓋舊數據,然后進入grace period;

回收者reclaimer:

等待在grace period之前的讀者退出臨界區;

在寬限期結束后,負責回收舊資源;

三個重要機制

發布/訂閱機制

主要用于更新數據,即使在數據被同時修改時線程也能安全瀏覽數據。RCU通過發布-訂閱機制(Publish-Subscribe Mechanism)實現這種并發的插入操作能力;

延遲回收機制:

實現檢查舊數據上所有RCU讀者完成,用于安全刪除舊數據;

多版本機制:

維護最近更新對象的多個版本,用于允許讀者容忍并發的插入和刪除新對象的多個版本;

最后總結最后,總結一下RCU鎖的核心思想:

讀者無鎖訪問數據,標記進出臨界區;

寫者讀取,復制,更新;

舊數據延遲回收;

RCU核心思想就三句話,產品經理都說簡單,但Linux內核實現卻不是這么簡單。除了要實現基本功能,需要考慮很多復雜情況:

內核的RCU系統可以說是內核最復雜系統之一,為了高性能和多核擴展性,設計了非常精巧的數據結構:

同時巧妙實現了很多核心流程:

檢查當前CPU是否度過QS;

QS report(匯報寬限期度過);

寬限期的發起與完成;

rcu callbacks處理;

其中很多實現都可以說是非常精巧,結合了預處理,批量處理,延后(異步)處理,多核并發,原子操作,異常處理,多場景精細優化等多種技術,性能好,可擴展性強,穩定性強,有一定的學習和參考價值,即使你的工作不是內核編程,里面體現很多編程思想和代碼設計思想,也是值得大家學習的。

擴展閱讀http://csng.cs.toronto.edu/publication_files/0000/0159/jpdc07.pdf

http://www.rdrop.com/users/paulmck/rclock/RCUdissertation.2004.07.14e1.pdf

https://lwn.net/Articles/262464/

http://www.wowotech.net/kernel_synchronization/461.html

http://concurrencyfreaks.blogspot.com/2013/05/lock-free-and-wait-free-definition-and.html

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11277

    瀏覽量

    224949
  • Linux
    +關注

    關注

    88

    文章

    11758

    瀏覽量

    219009
  • JAVA
    +關注

    關注

    20

    文章

    3001

    瀏覽量

    116421
  • CAS
    CAS
    +關注

    關注

    0

    文章

    35

    瀏覽量

    15587

原文標題:深入理解 RCU 核心原理

文章出處:【微信號:gh_3980db2283cd,微信公眾號:開關電源芯片】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    面試必看:排隊自旋之MCS的實現原理與關鍵考點

    在并發編程面試中,“” 是繞不開的核心話題,而自旋作為輕量級的代表,其優化方案更是高頻考點。
    的頭像 發表于 02-09 16:51 ?746次閱讀
    面試必看:排隊自旋<b class='flag-5'>鎖</b>之MCS<b class='flag-5'>鎖</b>的實現原理與關鍵考點

    存器中的時間借用概念與靜態時序分析

    對于基于存器的設計,靜態時序分析會應用一個稱為時間借用的概念。本篇博文解釋了時間借用的概念,若您的設計中包含存器且時序報告中存在時間借用,即可適用此概念。
    的頭像 發表于 12-31 15:25 ?5470次閱讀
    <b class='flag-5'>鎖</b>存器中的時間借用概念與靜態時序分析

    飛凌嵌入式ElfBoard-文件I/O的深入學習之文件

    應用于文件的機制,當多個進程同時操作同一文件時,對文件上鎖,來避免多個進程同時操作同一文件時產生競爭狀態。 文件可以分為建議性和強制性兩種: 建議性
    發表于 12-08 16:08

    霍爾元件在電子里是如何應用的?用幾顆?

    霍爾元件在電子中主要通過感知磁場變化實現狀態檢測、自動控制、防撬報警等功能,其應用數量取決于具體設計需求,通常為1-3顆,復雜系統可能更多。以下是對其應用原理和具體數量的詳細分析: 霍爾元件在
    的頭像 發表于 11-25 15:01 ?436次閱讀

    視頻智能圖像傳感器選型的核心考量因素

    隨著家庭與企業日益重視安全防護,智能已成為現代門禁控制系統的核心組件。智能早已超越傳統無鑰匙開鎖的范疇,通過集成無線連接、移動應用控制及生物識別認證功能,為用戶打造無縫且安全的使用體驗。許多智能
    的頭像 發表于 10-24 10:09 ?970次閱讀

    五大認證加冕!德施曼以“首創AI智能”重構智能競爭格局

    近日,智能領軍品牌德施曼獲得尚普咨詢及中研世紀兩大權威機構頒發的中國“首創AI智能”、“AI智能領導者”、“AI智能全國銷量第一”、“AI智能鎖好評率第一”、“AI智能
    的頭像 發表于 09-20 10:43 ?855次閱讀
    五大認證加冕!德施曼以“首創AI智能<b class='flag-5'>鎖</b>”重構智能<b class='flag-5'>鎖</b>競爭格局

    五大認證加冕!德施曼以“首創AI智能”重構智能競爭格局

    近日,智能領軍品牌德施曼獲得尚普咨詢及中研世紀兩大權威機構頒發的中國“首創AI智能”、“AI智能領導者”、“AI智能全國銷量第一”、“AI智能鎖好評率第一”、“AI智能
    的頭像 發表于 09-20 10:41 ?1157次閱讀

    動環監控系統與智能集成方案

    系統架構與工作原理動環監控系統與智能集成采用三層架構:智能鎖具層、動環監控單元(FSU)層和平臺管理層。FSU作為核心橋梁,通過DO口或485接口與智能連接,負責指令轉發和狀態收集。通信與供電
    的頭像 發表于 09-05 11:28 ?647次閱讀
    動環監控系統與智能<b class='flag-5'>鎖</b>集成方案

    屏顯智能電子語音芯片方案新選擇

    操作,逐漸成為衡量電子優劣的重要標準。在此背景下,傳統電子那單調的靜態文字界面,顯然已難以滿足用戶需求,而配備 TFT 顯示屏,支持視頻通話、動態 UI 展示以及多任務交互的新型電子
    的頭像 發表于 07-25 17:57 ?753次閱讀
    屏顯智能電子<b class='flag-5'>鎖</b>語音芯片方案新選擇

    LX10-12行程限位開關的正確接線方法

    行程限位開關的正確接線方法需根據控制需求選擇觸點類型(常開/常閉),通過串聯或并聯實現限位保護、方向控制或自功能,并需嚴格遵循安全規范進行安裝和測試。
    的頭像 發表于 07-21 14:42 ?2561次閱讀
    LX10-12<b class='flag-5'>行程</b>限位開關的正確接線方法

    什么是電磁控制板?24路控板的使用步驟概述

    電磁控制板是一種專用于控制電磁工作狀態的電子裝置,它可以接收指令并對電磁進行通斷電操作,從而實現對相關設備的鎖定和解鎖控制。電磁本身依靠電流產生磁場作用力來吸附或釋放
    的頭像 發表于 07-14 16:26 ?779次閱讀
    什么是電磁<b class='flag-5'>鎖</b>控制板?24路<b class='flag-5'>鎖</b>控板的使用步驟概述

    聯世界,智啟萬家,華普微藍牙智能解決方案

    密碼、指紋、刷卡與多模組合等主流門鎖形態,支持與手機APP、小程序、智能中控網關等多終端互聯,助力客戶快速實現智能門鎖產品的量產落地
    的頭像 發表于 06-26 15:46 ?809次閱讀
    <b class='flag-5'>鎖</b>聯世界,智啟萬家,華普微藍牙智能<b class='flag-5'>鎖</b>解決方案

    詳述24路電磁主板的工作原理和功能

    電磁是一種利用電磁原理設計的電子鎖具,它主要由電磁線圈和可移動銜鐵構成。當電流通過電磁線圈時,會產生磁場,使銜鐵被吸附并保持在某個位置,從而實現鎖門或固定物體的功能;斷電后,磁力消失,銜鐵在彈簧或
    的頭像 發表于 06-24 15:25 ?1106次閱讀
    詳述24路電磁<b class='flag-5'>鎖</b>主板的工作原理和功能

    一文讀懂Allegro先進磁性開關和存器

    Allegro 擁有豐富的霍爾效應和隧道磁阻(TMR)開關及存器產品,可廣泛應用于汽車、工業和消費電子等領域。本應用筆記旨在提供分步選型流程,協助設計師為具體應用場景選擇適配的 Allegro
    的頭像 發表于 06-12 17:26 ?1899次閱讀
    一文讀懂Allegro先進磁性開關和<b class='flag-5'>鎖</b>存器

    無源智能電子柜設備:開啟智能管理新時代

    效率和安全保障的重要工具。 二、無源智能電子柜設備概述 無源智能電子柜是一種先進的鎖具解決方案,主要由鎖具本身、智能鑰匙和管理平臺組成。與傳統鎖具相比,它最大的特點在于“無源”,即
    的頭像 發表于 04-08 18:16 ?1004次閱讀