一個ring buffer實現(xiàn)多線程通信。由于他們之間通信不需要鎖所以性能有很大的提高。
Disruptor更多的應用在高速事務中,利用JVM的偽內(nèi)存,這也可能是它為LMAX而生的,和akka的應用場景不一樣。
一般編寫并發(fā)應用程序馬上想到多線程或者多進程。但多線程需要處理資源競爭,共享訪問等問題,搞不好容易出現(xiàn)死鎖,當程序規(guī)模比較大時,排查難度很大。 Actor模型提供了另一種編寫并發(fā)應用程序的思路。 有點類似Node.JS的基于事件異步處理. (其實我覺得基于消息異步和基于事件異步是一回事)
什么是基于消息異步呢?很簡單,比如要開展一個項目,需要多人協(xié)作。作為項目經(jīng)理的你,只需要像手下發(fā)出命令,個人各干各的,互不干擾。做完了就回送一個消息給項目經(jīng)理,項目經(jīng)理再分派新的任務. (可能比喻得不恰當,但Actor的基本思路就是這樣,你不需要考慮資源共享和線程并發(fā)什么的, Actor庫屏蔽了這些底層的實現(xiàn)細節(jié) . 每個Actor就相當于一個人或者叫一個處理者,他們的職責很單一,就是響應對方發(fā)來的消息,做出響應,并回送一個響應消息。 每個Actor負責做自己的份內(nèi)事,最后有一個調度角色的Actor將所有Actor管理起來,形成一個整體)
Akka 是針對Scala和Java的Actor庫,JActor是一個用純Java編寫的Actor庫。
https://github.com/LMAX-Exchange/disruptorhttp://www.oschina.net/p/disruptor