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