成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何使用Disruptor(二)從Ringbuffer讀取

開發 后端
從上一篇文章中我們都了解了什么是Ring Buffer以及它是如何的特別。但遺憾的是,我還沒有講述如何使用Disruptor向Ring Buffer寫數據和從Ring Buffer中讀取數據。

從上一篇文章中我們都了解了什么是Ring Buffer以及它是如何的特別。但遺憾的是,我還沒有講述如何使用DisruptorRing Buffer寫數據和從Ring Buffer中讀取數據。

ConsumerBarrier與消費者

這里我要稍微反過來介紹,因為總的來說讀取數據這一過程比寫數據要容易理解。假設通過一些“魔法”已經把數據寫入到Ring Buffer了,怎樣從Ring Buffer讀出這些數據呢?

(好,我開始后悔使用Paint/Gimp 了。盡管這是個購買繪圖板的好借口,如果我繼續寫下去的話… UML界的權威們大概也在詛咒我的名字了。)

消費者(Consumer)是一個想從Ring Buffer里讀取數據的線程,它可以訪問ConsumerBarrier對象——這個對象由RingBuffer創建并且代表消費者與RingBuffer進行交互。就像Ring Buffer顯然需要一個序號才能找到下一個可用節點一樣,消費者也需要知道它將要處理的序號——每個消費者都需要找到下一個它要訪問的序號。在上面的例子中,消費者處理完了Ring Buffer里序號8之前(包括8)的所有數據,那么它期待訪問的下一個序號是9

消費者可以調用ConsumerBarrier對象的waitFor()方法,傳遞它所需要的下一個序號.

1 final long availableSeq = consumerBarrier.waitFor(nextSequence);

ConsumerBarrier返回RingBuffer的最大可訪問序號——在上面的例子中是12ConsumerBarrier有一個WaitStrategy方法來決定它如何等待這個序號,我現在不會去描述它的細節,代碼的注釋里已經概括了每一種WaitStrategy的優點和缺點 。

接下來怎么做?

接下來,消費者會一直原地停留,等待更多數據被寫入Ring Buffer。并且,一旦數據寫入后消費者會收到通知——節點9101112 已寫入。現在序號12到了,消費者可以讓ConsumerBarrier去拿這些序號節點里的數據了。

拿到了數據后,消費者(Consumer)會更新自己的標識(cursor)。

你應該已經感覺得到,這樣做是怎樣有助于平緩延遲的峰值了——以前需要逐個節點地詢問“我可以拿下一個數據嗎?現在可以了么?現在呢?”,消費者(Consumer)現在只需要簡單的說“當你拿到的數字比我這個要大的時候請告訴我”,函數返回值會告訴它有多少個新的節點可以讀取數據了。因為這些新的節點的確已經寫入了數據(Ring Buffer本身的序號已經更新),而且消費者對這些節點的唯一操作是讀而不是寫,因此訪問不用加鎖。這太好了,不僅代碼實現起來可以更加安全和簡單,而且不用加鎖使得速度更快。

另一個好處是——你可以用多個消費者(Consumer)去讀同一個RingBuffer ,不需要加鎖,也不需要用另外的隊列來協調不同的線程(消費者)。這樣你可以在Disruptor的協調下實現真正的并發數據處理。

BatchConsumer代碼是一個消費者的例子。如果你實現了BatchHandler, 你可以用BatchConsumer來完成上面我提到的復雜工作。它很容易對付那些需要成批處理的節點(例如上文中要處理的9-12節點)而不用單獨地去讀取每一個節點。

更新:注意Disruptor 2.0版本使用了與本文不一樣的命名。如果你對類名感到困惑,請閱讀我的變更總結

原文鏈接:http://ifeve.com/dissecting-the-disruptor-how-do-i-read-from-the-ring-buffer/

譯文鏈接:http://ifeve.com/dissecting_the_disruptor_how_doi_read_from_the_ring_buffer/

責任編輯:陳四芳 來源: ifeve.com
相關推薦

2013-06-18 11:15:44

DisruptorRingbuffer

2013-06-19 11:21:51

DisruptorRingbuffer

2022-09-27 10:07:01

要使用 source

2024-12-31 07:56:33

Disruptor內存有界隊列消費模式

2022-06-09 08:36:56

高性能Disruptor模式

2021-03-16 21:39:47

區塊鏈DEMOGo

2020-01-10 22:56:56

Python圖像處理Linux

2011-07-07 17:30:25

iPhone Xcode

2010-04-20 10:12:42

OraclePL

2009-06-17 09:29:22

2021-10-21 05:41:27

QueenSono安全工具提取數據

2013-06-18 10:30:45

Disruptor框架

2025-03-04 00:30:00

2022-06-19 14:23:56

Linux

2009-11-16 17:41:41

PHP二維數組

2021-08-02 15:02:37

Go Excelize 開發

2023-08-15 19:24:37

Python條形碼

2013-06-19 10:55:40

Disruptor并發框架

2022-12-09 08:40:56

高性能內存隊列

2023-04-18 08:27:16

日志級別日志包
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产精品人人爽夜夜爽 | 91日韩| 亚洲免费精品 | 久久久久成人精品亚洲国产 | 欧美日韩一区精品 | 精品免费国产视频 | 瑟瑟视频在线看 | 国产精品一区二区久久久久 | 国产精品亚洲成在人线 | 日本一区二区视频 | 欧美日韩久久 | 亚洲午夜电影 | 国产免费又黄又爽又刺激蜜月al | 久久精品成人热国产成 | 国产中文字幕在线 | 精品国产乱码久久久久久a丨 | av国产在线观看 | 日日夜夜操天天干 | 午夜精品一区 | 中文字幕乱码亚洲精品一区 | 久久中文高清 | 国产精品视频网 | 色必久久 | 欧美色成人| av成年人网站 | 91国内精精品久久久久久婷婷 | 精品美女在线观看视频在线观看 | 日韩成人精品一区二区三区 | 亚洲一区二区视频 | www.日本精品| 日韩在线观看中文字幕 | 亚洲男人的天堂网站 | 中文字幕日韩一区 | 久久亚| 日韩性生活网 | 国产99久久久国产精品 | 精品国产乱码久久久久久蜜柚 | 日韩一区二区在线视频 | 成人h动漫亚洲一区二区 | 免费人成在线观看网站 | 日韩av成人在线观看 |