1. 程式人生 > >Disruptor核心概念

Disruptor核心概念

  • RingBuffer:基於陣列的快取實現,也是建立sequencer與定義WaitStrategy的入口
  • Disruptor:持有RingBuffer、消費者執行緒池Executor、消費者集合ConsumerRepository等引用
  • Sequence:
  1. 通過順序遞增的序號來編號,管理進行交換的資料(事件)
  2. 對資料(事件)的處理過程總是沿著序號逐個遞增處理
  3. 一個Sequence用於跟蹤標識某個特定的事件處理著(RingBuffer、Producer、Consumer)的處理進度
  4. 可以看成是一個AtomicLong用於標識進度
  5. 防止不同Sequence之間cpu快取偽共享(Flase Sharing)的問題
  • Sequencer:
  1. 真正Disruptor核心
  2. 有兩個實現:SingleProducerSequencer、MultiProducerSequencer
  3. 主要實現生產者和消費者之間快速、正確地傳遞資料的併發演算法
  • Sequence Barrier
  1. 用於保持對RingBuffer的Main Published Sequence(Producer)和Consumer之間的平衡關係;
  2. 還定義了決定Consumer是否還有可處理的事件的邏輯
  • WaitStrategy
  1. 決定一個消費者將如何等待生產者將Event置入Disruptor
  2. 主要策略:BlockingWaitStategy、SleepingWaitStategy、YieldingWaitStategy
  3. BlockingWaitStategy:最低效,對cpu消耗最小並且在各種部署中提供更加一致的效能表現
  4. SleepingWaitStategy:效能表現跟BlockingWaitStategy差不多,對cpu消耗類似,但對生產者執行緒影響最小,適合用於非同步日誌類似場景
  5. YieldingWaitStategy:的效能最好的,適合用於低延遲的系統。在要求極高效能且事件處理線束小於cpu邏輯核心數的場景中,推薦使用此策略,如cpu開啟超執行緒的特性(推薦
  • Event:
  1. 從生產者到消費者過程中所處理的資料單元
  2. Disruptor中沒有程式碼表示Event,因為它完全是由使用者自定義的
  • EventProcessor:
  1. 主要事件迴圈,處理Disruptor中的Event,擁有消費者的Sequence
  2. 他有一個實現類,BatchEventProcessor,包含event loop有效實現,並且將回調到一個EventHandler介面的實現物件
  • EventHandler:由使用者實現並且代表Disruptor中的一個消費者的介面,也是我們消費者邏輯都毒液寫在這裡
  • WorkProcessor:確保每個Sequence只被一個processor消費,在同一個WorkPool中處理多個WorkProcessor不會浪費同樣的Sequence。

Disruptor圖解

相關推薦

Disruptor核心概念

RingBuffer:基於陣列的快取實現,也是建立sequencer與定義WaitStrategy的入口 Disrupt

Disruptor核心概念及體驗

本文基於最新的3.4.2的版本文件進行翻譯,翻譯自: https://github.com/LMAX-Exchange/disruptor/wiki/Introduction https://github.com/LMAX-Exchange/disruptor/wiki/Getting-Started Dis

Disruptor併發框架 (之)核心概念場景分析

核心術語 RingBuffer(容器): 被看作Disruptor最主要的元件,然而從3.0開始RingBuffer僅僅負責儲存和更新在Disruptor中流通的資料。對一些特殊的使用場景能夠被使用者(使用其他資料結構)完全替代。 Sequence(槽位置): D

ios多線程操作(四)—— GCD核心概念

indent img 操作 fort 16px 2.0 b2c 有一種 read GCD全稱Grand Central Dispatch。可譯為“大派發中樞調度器”,以純C語言寫成,提供了很多很強大的函數。GCD是蘋果公司為多核的並行運算提出的解決方式,它能夠自己主

vuex所有核心概念完整解析State Getters Mutations Actions

function 鉤子 action 元素事件 getter 參數 pst isp 文件中 vuex是解決vue組件和組件間相互通信而存在的,vuex理解起來稍微復雜,但一旦看懂則即為好用: 安裝: npm install --save vuex 引入 import

spark 教程一 RDD和核心概念

coalesce reg ntb red gre 保存 所有 lec 會有 1.RDD 的介紹   RDD 是spark的核心概念,可以將RDD是做數據庫中的一張表,RDD可以保存任何類型的數據,可以用API來處理RDD及RDD中的數據,類似於Mapreduce, RDD

Docker 學習筆記之 核心概念

api rest api 核心概念 log 筆記 try nbsp .com ont Docker核心概念: Docker Daemon Docker Container Docker Registry Docker Client 通過rest API 和Docker

Maven學習(四)-- Maven的核心概念

pue nlj 人員 gbk provided spi vts 源代碼 -s 摘自:http://www.cnblogs.com/xdp-gacl/p/4051819.html 一、Maven坐標 1.1、什麽是坐標?   在平面幾何中坐標(x,y)可以標識平面中唯一的一

WCF分布式服務1-核心概念

參考 mod operation 解密 rar 重新 tran 意義 傳遞 參考msdn library for WCFWindows Communication Foundation (WCF) 是用於構建面向服務的應用程序的框架。 借助 WCF,可以將數據作為異步消息從

小白也能看懂的 Laravel 核心概念講解

bin php 依賴註入 keyword set 即將 函數 routes nds 自動依賴註入 什麽是依賴註入,用大白話將通過類型提示的方式向函數傳遞參數。 實例 1 首先,定義一個類: /routes/web.php class Bar {} 假如我們在其他地方要使用到

SparkStreaming 運行原理與核心概念

dst dstream 抽象 com size ont 分享 logs -1 SparkStreaming 運行原理 sparkstreaming 的高層抽象DStream Dstream與RDD的關系 Batch dur

CSS的核心概念

存在 平鋪 ash osi 層疊 嵌套 pos rep 大小 CSS中有兩個核心概念,繼承和層疊。 繼承是指應用在某個標簽上的CSS屬性傳遞給了內部嵌套的標簽,通常來說文本類的會被繼承(字體,字號,顏色) css中常用的標簽: 文本類:text-algin:center;水

CSS入門—兩個核心概念

權重 body class colspan cells 發生 val align imp 一、繼承: 1、指應用在某個標簽上的CSS屬性傳遞給了內部嵌套的標簽; 2、通常文本類的會被繼承:字體、字號、顏色; 二、層疊: 類型 內嵌 i

CSS的兩個核心概念——層疊和繼承

rom 核心概念 clas 兩個 屬性 同時 加載 字體 繼承 1、繼承: 是指應用在某個標簽/元素上的CSS屬性傳遞給了內部嵌套的標簽。 通常來說文本類的會被繼承(字體、字號、顏色) chrome裏面是灰色的表示沒有繼承 2、 1-1繼承 1- 2一個標簽可能有一個或多個

Kubernetes核心概念之Replication Controller詳解

kubernetes docker 虛擬化 replication controll Replication Controller簡稱RC,它能夠保證Pod持續運行,並且在任何時候都有指定數量的Pod副本,在此基礎上提供一些高級特性,比如滾動升級和彈性伸縮? ? 它在k8s中的架構如圖:? ?

Elasticsearch學習筆記(六)核心概念和分片shard機制

服務器 存儲 play wid 讀寫 number 容錯 組成 操作 一、核心概念 1、近實時(Near Realtime NRT) (1)從寫入數據到數據可以被搜索到有一個小延遲(大概1秒); (2)基於es執行搜索和分析可以達到秒級

Dockerd的核心概念,鏡像操作

快捷 原生 返回 false 主機 是否 安裝 docker倉庫 生命 簡介 在實際使用Docker的過程中,遇到一些問題,但是總沒有系統的博文可以詳細的介紹Docker,所以個人寫一個由淺入深的系統學習Docker過程。 這裏首先介紹Docker的三大核心概念:鏡像(Im

十分鐘帶你理解Kubernetes核心概念

rtu 虛擬 請求分發 問題: int ref spa virtual ogl 本文將會簡單介紹Kubernetes的核心概念。因為這些定義可以在Kubernetes的文檔中找到,所以文章也會避免用大段的枯燥的文字介紹。相反,我們會使用一些圖表(其中一些是動畫)和示例來解釋

webpack的四大核心概念

-- geo 轉換 ref section 依賴 req eth comm webpack中文文檔:https://doc.webpack-china.org/concepts/ 一、Entry(入口) 1、單個入口(簡寫)語法 // 語法 entry: string|Ar

從經典架構項目中透析微服務架構的核心概念和充血模型

java 架構 微服務 微服務架構和SOA區別 微服務現在辣麽火,業界流行的對比的卻都是所謂的Monolithic單體應用,而大量的系統在十幾年前都是已經是分布式系統了,那麽微服務作為新的理念和原來的分布式系統,或者說SOA(面向服務架構)是什麽區別呢? 我們先看相同點: 需要Registry,實