Disruptor訊息處理器

2021-07-31 13:14:23 字數 2486 閱讀 9808

在helloworld的例項中,我們建立disruptor例項,然後呼叫getringbuffer方法去獲取ringbuffer,其實在很多時候,我們可以直接使用ringbuffer,以及其他的api操作。我們一起熟悉下示例:

trade類

public

class trade

public

void

setid(string id)

public string getname()

public

void

setname(string name)

public

double

getprice()

public

void

setprice(double price)

public atomicinteger getcount()

public

void

setcount(atomicinteger count)

}

tradehandler類

public

class tradehandler implements eventhandler,workhandler

@override

public

void

onevent(trade event, long sequence, boolean endofbatch) throws exception

}

eventprocessor訊息處理器類

public

class

main1

}, buffer_size,new yieldingwaitstrategy());

//建立執行緒池

executorservice executors = executors.newfixedthreadpool(thread_numbers);

//建立sequencebarrier

sequencebarrier sequencebarrier = ringbuffer.newbarrier();

//建立訊息處理器

batcheventprocessortransprocessor =

new batcheventprocessor(ringbuffer, sequencebarrier, new tradehandler());

//這一步的目的就是把消費者的位置資訊引用注入到生產者 如果只有乙個消費者的情況可以省略

ringbuffer.addgatingsequences(transprocessor.getsequence());

//把訊息處理器提交到執行緒池

executors.submit(transprocessor);

//執行生產者的工作

//如果存在多個消費者 那重複執行上面的三行** 把tradehandler換成其他消費者

future<?> future = executors.submit(new callable()

return

null;

}});

future.get();//等待生產者結束

thread.sleep(1000);//等待一秒,等待消費都處理結束

transprocessor.halt();//通知事件 或者說處理器可以結束了

executors.shutdown();//終止執行緒

}}

public

class main2

};ringbufferringbuffer = ringbuffer.createsingleproducer(eventfactory, buffer_size);

sequencebarrier sequencebarrier = ringbuffer.newbarrier();

executorservice executor = executors.newfixedthreadpool(thread_size);

workhandlerhandler = new tradehandler();

workerpoolworkerpool = new workerpool(ringbuffer,sequencebarrier,new ignoreexceptionhandler(),handler);

workerpool.start(executor);

//下面這個生產8個資料

for(int i=0;i<8;i++)

thread.sleep(1000);//等待一秒,等待消費都處理結束

workerpool.halt();//通知事件 或者說處理器可以結束了

executor.shutdown();//終止執行緒

}}

物理處理器與邏輯處理器

記錄解決方案,自己實際處理過,方案可用,在自己的部落格中記錄一下。cpu central processing unit 是 處理單元,本文介紹物理cpu,物理cpu核心,邏輯cpu,以及他們三者之間的關係。乙個物理cpu可以有1個或者多個物理核心,乙個物理核心可以作為1個或者2個邏輯cpu。物理c...

處理器核心

處理器核心 cache 寫緩衝器 主存 輔助儲存器 寫操作,對核心而言非迫切,所以加乙個寫緩衝器很好。cache可放在處理器核心與mmu之間 邏輯 cache,主流 也可放在mmu與主存之間 物理 cache 對儲存器中相同或相鄰資料和 的反覆使用,是cache改善效能的主要原因。cache同時使用...

處理器排程

1 cpu排程的相關概念 a.cpu排程 其任務是控制 協調程序對cpu的競爭 即按一定的排程演算法從就緒佇列中選擇乙個程序,把cpu的使用權交給被選中的程序 如果沒有就緒程序,系統會安排乙個系統空閒程序或idle程序 b.cpu要解決的三個問題 cpu排程的時機 就緒佇列的改變引發了重新排程 事件...