disruptor - 併發程式設計框架
disruptor - Concurrent Programming Framework 併發程式設計框架
disruptor釋出了Java的2.0版本(.Net版本見這裡),disruptor是一個高效能的非同步處理框架,或者可以認為是最快的訊息框架(輕量的JMS),也可以認為是一個觀察者模式實現,或者事件-監聽模式的實現,直接稱disruptor模式。
disruptor最大特點是高效能,其LMAX架構可以獲得每秒6百萬訂單,用1微秒的延遲獲得吞吐量為100K+。
disruptor與傳統高效能模型是不同的,LMAX團隊透過測試發現熱門的Actor模型在高併發設計有瓶頸,disruptor的RingBuffer根據多核CPU的快取記憶體設計特點進行了最佳化,讓每個CPU執行一個執行緒,多個CPU就是多執行緒併發模式了,正如團隊所言:我們想出一個更好,更快的執行緒之間共享資料的方式,不與世界分享將是自私的,不共享知識讓我們看上去是死聰明。
傳統訊息框架使用Queue佇列,如JDK LinkedList等資料結構實現,RingBuffer比Linked之類資料結構要快,因為沒有鎖,是CPU友好型的。另外一個不同的地方是不會在清除RingBuffer中資料,只會覆蓋,這樣降低了垃圾回收機制啟動頻率。
使用案例程式碼:
或者:
相關主題:
disruptor釋出了Java的2.0版本(.Net版本見這裡),disruptor是一個高效能的非同步處理框架,或者可以認為是最快的訊息框架(輕量的JMS),也可以認為是一個觀察者模式實現,或者事件-監聽模式的實現,直接稱disruptor模式。
disruptor最大特點是高效能,其LMAX架構可以獲得每秒6百萬訂單,用1微秒的延遲獲得吞吐量為100K+。
disruptor與傳統高效能模型是不同的,LMAX團隊透過測試發現熱門的Actor模型在高併發設計有瓶頸,disruptor的RingBuffer根據多核CPU的快取記憶體設計特點進行了最佳化,讓每個CPU執行一個執行緒,多個CPU就是多執行緒併發模式了,正如團隊所言:我們想出一個更好,更快的執行緒之間共享資料的方式,不與世界分享將是自私的,不共享知識讓我們看上去是死聰明。
傳統訊息框架使用Queue佇列,如JDK LinkedList等資料結構實現,RingBuffer比Linked之類資料結構要快,因為沒有鎖,是CPU友好型的。另外一個不同的地方是不會在清除RingBuffer中資料,只會覆蓋,這樣降低了垃圾回收機制啟動頻率。
使用案例程式碼:
DisruptorWizard<MyEvent> dw = new DisruptorWizard<MyEvent>(MyEvent.FACTORY, 32, Executors.newCachedThreadPool()); EventHandler<MyEvent> handler1 = new EventHandler<MyEvent>() { public void onEvent(MyEvent event, boolean endOfBatch) throws Exception { System.out.println("MyEvent=" + event.r); } }; EventHandler<MyEvent> handler2 = new EventHandler<MyEvent>() { public void onEvent(MyEvent event, boolean endOfBatch) throws Exception { System.out.println("MyEvent=" + event.getResult()); } }; dw.handleEventsWith(handler1); dw.after(handler1).handleEventsWith(handler2); RingBuffer ringBuffer = dw.start(); MyEvent event = (MyEvent) ringBuffer.nextEvent(); event.setValue(60); ringBuffer.publish(event); <p class="indent"> |
或者:
SampleExecutor executor = new SampleExecutor(); RingBuffer<MyEvent> ringBuffer = new RingBuffer<MyEvent>(MyEvent.FACTORY, 4, ClaimStrategy.Option.SINGLE_THREADED, WaitStrategy.Option.YIELDING); MyBatchHandler batchHandler = new MyBatchHandler(); DependencyBarrier dependencyBarrier = ringBuffer.newDependencyBarrier(); BatchEventProcessor<MyEvent> batchProcessorFizz = new BatchEventProcessor<MyEvent>(ringBuffer, dependencyBarrier, batchHandler); executor.execute(batchProcessorFizz); MyEvent event = ringBuffer.nextEvent(); event.setValue(60); ringBuffer.publish(event); <p class="indent"> |
相關主題:
[該貼被banq於2011-09-07 18:58修改過]
相關文章
- 併發框架Disruptor譯文框架
- Java 併發程式設計 Executor 框架Java程式設計框架
- 《java併發程式設計的藝術》併發容器和框架Java程式設計框架
- Disruptor 高效能併發框架二次封裝框架封裝
- 《java併發程式設計的藝術》Executor框架Java程式設計框架
- JUC併發程式設計與高效能記憶體佇列disruptor實戰-上程式設計記憶體佇列
- JUC併發程式設計與高效能記憶體佇列disruptor實戰-下程式設計記憶體佇列
- 併發程式設計程式設計
- C++併發程式設計框架Theron(4)——Hello world!C++程式設計框架
- 【Java併發程式設計】併發程式設計大合集-值得收藏Java程式設計
- Go 併發程式設計 - 併發安全(二)Go程式設計
- Golang 併發程式設計Golang程式設計
- 併發程式設計(四)程式設計
- 併發程式設計(二)程式設計
- java 併發程式設計Java程式設計
- 併發程式設計13程式設計
- golang併發程式設計Golang程式設計
- Java併發程式設計Java程式設計
- Go 併發程式設計Go程式設計
- shell併發程式設計程式設計
- Scala併發程式設計程式設計
- 併發程式設計 synchronized程式設計synchronized
- C++併發程式設計框架Theron(3)——Theron入門C++程式設計框架
- 併發程式設計和並行程式設計程式設計並行行程
- Java併發程式設計-鎖及併發容器Java程式設計
- 併發程式設計之:JUC併發控制工具程式設計
- Java併發系列—併發程式設計挑戰Java程式設計
- 【Java併發程式設計】一、為什麼需要學習併發程式設計?Java程式設計
- Java併發程式設計 - 第十一章 Java併發程式設計實踐Java程式設計
- Java併發程式設計(07):Fork/Join框架機制詳解Java程式設計框架
- 併發程式設計:DEMO:比較Stream和forkjoin框架的效率程式設計框架
- C++併發程式設計框架Theron(1)——Actor模型介紹C++程式設計框架模型
- C++併發程式設計框架Theron(2)——Theron的五要素C++程式設計框架
- C++併發程式設計框架Theron(5)——File reader(1)C++程式設計框架
- C++併發程式設計框架Theron(6)——File reader(2)C++程式設計框架
- 使用Java 7.0的 Fork/Join框架進行併發程式設計Java框架程式設計
- java-併發程式設計Java程式設計
- 併發程式設計前傳程式設計