第一點,咱們來看一下Disruptor爲什麼如此高效,你們都知道併發也就是多線程編程的場景下爲了保證數據共享的安全性都會使用鎖的方式解決,可是由此帶來的負面影響就是性能問題了,俗話說的好——鎖匙性能的殺手。加了鎖就丟失了不少的性能,Disruptor作的以第一件事情就是消除鎖的使用,Disruptor內部使用了一個環形隊列維護的一個RingBuffer緩衝區,在這個基礎上使任何一個任務都是有序曲執行,在一個時間點上保證了隊列內每一個元素只被一個線程所使用。其餘線程處理隊列其餘的元素這樣一來就保證了線程安全的問題,至於線程跟隊列元素的具體交互細節這裏就很少闡述,咱們主要研究性能爲何這麼高,固然只消除了鎖的使用尚未完,Disruptor還沿用了cpu緩衝行的一個免費加載的特性去提升高速緩存的命中,這裏說明一下cpu到主存的時間大約在60-80納秒,cpu到緩衝的時間大約在1納秒,若是命中的話就省去了59納秒的時間,59納米對於cpu或者對於高併發來講是很稀有的資源了。接下來我們說一下cpu緩存行的概念,好比說如今有一個變量a和一個變量b這兩個變量內存地址是相鄰的,那麼cpu在訪問a變量的時間會把a變量加載到緩衝行上,緩衝行的免費加載特性會把相鄰的b也加載進來儘管b變量對於當前的cpu來講是沒有用的,而且會繼續把b變量後面地址相鄰的內存數據也加載到緩存行只要緩存行滿爲止。那麼咱們在編程的時間能夠很好的利用緩衝行免費加載的特性來提升性能了,Disruptor就是這麼作的,前面說了Disruptor內部維護了一個環形隊列,這個隊列是由數組實現的,你們都知道數組的特性就是一段內存地址連續的空間,那麼cpu在加載隊列內的一個元素進行處理的時間會把隊列內當前元素的後續元素都加載到緩存行上面,隊列只有序處理的那麼也就是說緩存行上面的被免費加載的後續元素所有會命中,那麼也就是說這個隊列僅僅須要加載幾回數據到緩存cpu就能夠經過大量的命中去處理全部的元素。想一想看每次命中節約59納秒,這個性能提高也是不小的啦!
編程
第一次寫博客,按照我本身的話描述的個人理解,理解不對或者錯誤的地方歡迎指正,3q
數組