disruptor介紹 Martion Foler 在本身網站上寫了一篇LMAX文章,LMAX是一種新型零售金融交易平臺,可以以很低的延遲產生大量的交易。這個系統是創建在jvm平臺,核心是一個業務邏輯處理器,可以在一個線程里美妙處理6百萬訂單。業務邏輯徹底是運行在內存中,使用事件源驅動方式。業務所及處理器的核心是disruptor disruptir 是一個開源併發框架,可以在無餿的狀況下實現網絡的queue併發操做 生產端將消息傳入disruptor,disruptor主動將消息傳送給消費端,而不是消費端來取數據。能夠將disruptor理解爲一個高效的隊列。而且disruptor作了大量的緩存和無鎖的並行計算。不是說disruptor能一個線程1秒內能消費6百萬,而是能將6百萬消息發送給消費者 Disruptor是一個高性能的異步處理框架,或者認爲是最快的消息框架(輕量的JMS),也能夠認爲是一個觀察者模式的實現。或者事件監聽模式的實現。算法
在disruptor中,實現hello world 第一: 簡歷一個event類 第二: 簡歷一個工廠event類,用於建立event類實力對象 第三:須要有一個監聽事件類,用於處理數據Event類 第四:測試:實例化disruptor實例,配置一系列參數。而後對disruptor綁定監聽事件類,接受並處理數據 第五:在disruptor中,真正存儲數據的核心叫作RingBuffer,咱們經過Disruptor實例拿到他,而後把數據生產處理,把數據加入RingBuffer的實例對象中便可。 disruptor實例化的幾個參數含義: 1工廠類對象用於建立繼承Event的類對象, 2緩衝區大小(必定是2的n次方), 3線程池,進行disruptr內部數據接收處理調度, 4 ProducerType.SINGLE 和 ProducerType.MULTI 指定當前生產者是隻有一個仍是多個 5 一種策略,當生產端和消費端速度不對等時,處理的策略 - BlockingWaitsetrategy 最低效的策略,但其對cpu小號最小,而且在各類不一樣部署環境中能提供更加一致的性能表現緩存
sleepIngWaitsetrategy 性能表現和BlockingWaitsetrategy差很少,對cpu小號也雷士,但其對生產者線程的影響最小,適用於異步日誌相似的場景
YieldingWaitstrategy 性能最好的,適用於低延遲系統,在性能要求極高且事件處理線程數小於cpu邏輯核心數的場景中,推薦使用
生產者 1: ringBuffer 的next的方法獲取下一個可放數據的槽,即索引 2: 經過上面的索引,get取出一個空的事件填充 3:獲取要經過事件傳遞的業務數據 調用event的業務數據方法,如setValue 4:發佈事件(publish方法必須在finnally中,發佈的是索引位置) disruptor詳細說明與使用 RingBuffer 是disruptor最主要的組件,在3.0後就開始僅僅負責存儲和更新dis中流通的數據。 sequence disruptor使用sequence表示一個特殊的處理的序號。和disruptor同樣,每一個消費者EventProcessor都維持一個sequnce。大部分的併發代碼以來這些sequence值的運轉,所以sequence支持多種當前爲AtomicLong類的特性 sequencer:這是disruptor真正的核心,實現了這個藉口的兩種生產者俊實現了全部的併發方法,爲了在生產者和消費者之間驚醒準確快速的數據傳遞 sequenceBarrier 是有sequencer生成的,而且包含了已經發布的的swquence的引用,這些sequence源於sequenceer和一些對的消費者的sequence。它包含了決定是否共消費者來消費的event的邏輯。 實際就是告訴哪一個環形隊列哪一個位置的數據已經發布了,等待消費。而後經過sequenceBarrier的算法來協調消費和生成的關係策略網絡
disruptor應用併發