SlideShare a Scribd company logo
www.dotnetconf.net
Disruptor.Net
Disruptor.Net
Disruptor.Net
淺談高並發與多執行緒
Disruptor.Net
Disruptor.Net
Disruptor.Net
Disruptor.Net
排程處理
Disruptor.Net
同時處理
Disruptor.Net
Disruptor.Net
多執行緒爭搶什麼資源?
快 慢
Disruptor.Net
Disruptor.Net
Disruptor.Net
Disruptor.Net
什麼是Disruptor ?
註:QCon是一个InfoQ主辦的全球性的技術盛會,每年在倫敦、東京、北京、紐約、聖保羅、上海、舊金山等地舉辦
Disruptor.Net
https://github.com/LMAX-Exchange/disruptor
https://groups.google.com/forum/#!forum/lmax-disruptor
ABC Arbitrage
https://www.nuget.org/packages/Disruptor
https://github.com/disruptor-net/Disruptor-net
Disruptor.Net
Disruptor的架構設計
Disruptor.Net
Disruptor.Net
Disruptor.Net
Thread 2Thread 1 Save state Restore state
Context Switch
Time
Disruptor.Net
https://mechanical-sympathy.blogspot.com/2011/07/false-sharing.html
Disruptor.Net
Disruptor.Net
Disruptor.Net
Disruptor.Net
0
2,000
4,000
6,000
8,000
10,000
12,000
14,000
-
10,000,000
20,000,000
30,000,000
40,000,000
50,000,000
60,000,000
70,000,000
1 2 3 4 5 6 7
Performance
ConcurrentQueue Operations per second Disruptor.Net Operations per second
ConcurrentQueue Duration (ms) Disruptor.Net Duration (ms)
適合的應用場景與實務技巧分享
Disruptor.Net
Disruptor.Net
Disruptor.Net
Disruptor.Net
Disruptor.Net
Disruptor.Net
Disruptor.Net
Disruptor.Net
我的FB 我的Blog 我的GitHub
Disruptor.Net

More Related Content

PDF
Containers from scratch
PDF
Cloud Native Practice
PDF
Dockerを用いたマイクロサービスについて
PPTX
PPTX
RunC, Docker, RunC
PPTX
Minio ♥ Go
PDF
사진형SNS 인스플
PDF
Containers from scratch
Containers from scratch
Cloud Native Practice
Dockerを用いたマイクロサービスについて
RunC, Docker, RunC
Minio ♥ Go
사진형SNS 인스플
Containers from scratch

What's hot (7)

PPTX
The Evolution of SpeedyCloud Resources Scheduling System
KEY
Redis -- Memory as the New Disk
PPTX
Capodieci - Proof of... what?
PDF
SlideShare API ''Get Slideshow Information'' method example with Groovy
PDF
2017대선 빅데이터 분석
PDF
2017 03-29-elastic-meetup-kibana
PDF
Смарт-контракты: базовые инструменты для разработки и тестирования. Спикер: Д...
The Evolution of SpeedyCloud Resources Scheduling System
Redis -- Memory as the New Disk
Capodieci - Proof of... what?
SlideShare API ''Get Slideshow Information'' method example with Groovy
2017대선 빅데이터 분석
2017 03-29-elastic-meetup-kibana
Смарт-контракты: базовые инструменты для разработки и тестирования. Спикер: Д...
Ad

Recently uploaded (20)

PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PDF
AI-Powered Threat Modeling: The Future of Cybersecurity by Arun Kumar Elengov...
PDF
Website Design Services for Small Businesses.pdf
PPTX
CHAPTER 2 - PM Management and IT Context
PDF
Product Update: Alluxio AI 3.7 Now with Sub-Millisecond Latency
PPTX
Oracle Fusion HCM Cloud Demo for Beginners
DOCX
Greta — No-Code AI for Building Full-Stack Web & Mobile Apps
PDF
iTop VPN Crack Latest Version Full Key 2025
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PDF
iTop VPN 6.5.0 Crack + License Key 2025 (Premium Version)
PPTX
WiFi Honeypot Detecscfddssdffsedfseztor.pptx
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PPTX
Operating system designcfffgfgggggggvggggggggg
PDF
CCleaner Pro 6.38.11537 Crack Final Latest Version 2025
PDF
wealthsignaloriginal-com-DS-text-... (1).pdf
PDF
Designing Intelligence for the Shop Floor.pdf
PDF
iTop VPN Free 5.6.0.5262 Crack latest version 2025
PDF
How to Make Money in the Metaverse_ Top Strategies for Beginners.pdf
PPTX
Computer Software and OS of computer science of grade 11.pptx
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
AI-Powered Threat Modeling: The Future of Cybersecurity by Arun Kumar Elengov...
Website Design Services for Small Businesses.pdf
CHAPTER 2 - PM Management and IT Context
Product Update: Alluxio AI 3.7 Now with Sub-Millisecond Latency
Oracle Fusion HCM Cloud Demo for Beginners
Greta — No-Code AI for Building Full-Stack Web & Mobile Apps
iTop VPN Crack Latest Version Full Key 2025
Wondershare Filmora 15 Crack With Activation Key [2025
Navsoft: AI-Powered Business Solutions & Custom Software Development
iTop VPN 6.5.0 Crack + License Key 2025 (Premium Version)
WiFi Honeypot Detecscfddssdffsedfseztor.pptx
Design an Analysis of Algorithms I-SECS-1021-03
Operating system designcfffgfgggggggvggggggggg
CCleaner Pro 6.38.11537 Crack Final Latest Version 2025
wealthsignaloriginal-com-DS-text-... (1).pdf
Designing Intelligence for the Shop Floor.pdf
iTop VPN Free 5.6.0.5262 Crack latest version 2025
How to Make Money in the Metaverse_ Top Strategies for Beginners.pdf
Computer Software and OS of computer science of grade 11.pptx
Ad

Editor's Notes

  • #3: 大家早安,我是Jed 講第一場壓力好大,特別是人還這麼多,希望接下來的40分鐘能讓各位有所收獲 我目前是在台北的一間公司擔任資深架構師 雖然說我目前在台北工作,但其實我老家在台中 能有這個機會跟台中的朋友分享技術感覺蠻開心的
  • #4: Disruptor是我在2014年開始研究的一個Framework 後來也曾經實際用來開發在工作上的一個即時交易系統 希望今天這個Session能讓更多人瞭解與學習這個Framework
  • #7: 其實蠻多人容易搞混這2個名詞所代表的意義,跟多執行緒都有關係,這也導致許多人在設計與開發系統時錯誤的使用多執行緒試圖解決效率問題,所以我們先來看一下這2個的差異
  • #8: 舉個例子
  • #9: 2個女朋友,不能同時約會 怎麼辦? 時間排開不就好了? 一個約星期六,一個約星期日 感覺這樣安排很美好的舉手? 有舉手的的應該是沒交過二個以上的女朋友 沒舉手的如果有帶女朋友來的,自己想辦法跟她解釋
  • #10: 當然我也沒同時交過2個 但重點不是交幾個女朋友 重點是並發的多執行緒其實還是只有一個主體 只是開了一堆影分身,讓你感覺像是很多個主體一樣
  • #12: 執行緒死結(Dead lock) 你同時跟三個女生交往 平常約會的時候都安排的很好 但情人節的時候不小心約在同一個時段的同地方
  • #13: 那平行呢? 我們一樣舉個例子 爸爸喝啤酒 兒子喝牛奶
  • #14: 並發的主要目的是提昇反應時間 平行的主要目的是加速解決問題的時間
  • #16: 這張圖是台北很有名的機車瀑布,發生在早上的上班時間 當一綠燈時,所有的機車都會搶著通過 你們把這些機車想像成很多的執行緒,而這條道路就是被爭搶的共用資源 高並發是很多的執行緒爭搶共享資源的現象
  • #17: 資源大致可分為2大類,運算與I/O,運算的代表就是CPU,I/O則粗略可分為3類 速度最快的自然是CPU 最慢的是網路
  • #18: 所謂執行緒安全,是指程式碼在並發的情況下,可以確保多執行緒的排程處理結果是正確的 而同步(Synchronized)是指藉由一些設計讓程式碼具備執行緒安全的特性,進而保證多執行緒存取共享資源的結果正確
  • #19: 這是一個很常見的Web系統架構,愈往下層走,資源的競爭程度愈高 有效交易會發生在最內層,想要增加有效交易的吞吐量是最不容易的
  • #23: Disruptor是由英國一家叫LMAX的金融商品交易公司以Java開發的開源非同步事件處理框架,發表於2010年的QCon,當時以單執行緒每秒處理600萬金融撮合交易的超高效能引起關注。
  • #24: 以股票為例 台灣大(3045)的目前成交價是105元 我以104元買進50張,這就會在市場上掛單104元買入50張 當有人願意以104元賣出25張,我掛的單就會成交25張 撮合交易是一種多對多的交易,每一次撮合時要分別對買方與賣方的交易數量做鎖定,因為每次撮合雙方都有可能只是部份成交 我們可以想像一下,這樣的交易行為如果以DB的方式來實現的話,瞬間交易壓力是非常高的,因為每個人下的交易單,都必須依據買與賣進行比對,在雙方交易時都必須進行鎖定 所以單執行緒能每秒處理600萬是非常恐怖的處理能力
  • #26: ABC Arbitrage [ˈärbiˌträZH]
  • #27: 接下來我們來看一下LMAX的主要架構設計
  • #29: Disruptor這個Framework的架構設計很簡潔 RingBuffer負責存放Event object,提供一個lock-free的類佇列結構,使用Array來實現,同時也是一個Object pool,因此也解決了頻繁的GC回收造成的性能損耗 Sequence 使用遞增序號,用來追蹤目前Producer與Consumer分別處理到哪一個Event,並解決False sharing的問題 關於什麼是False sharing? 待會兒我們會特別說明這個部份 Sequencer 核心邏輯,負責處理並發數據存取的演算法,基於各種使用情景,可以使用不同的策略演算法 SequenceBarrier 依使用情境,可能會有多個SequenceBarrier,分別負責參考Producer與Consumer的Sequence,避免存取了還不能存取的Event IEventHandler 用來實現複雜的業務邏輯 Event 事件訊息
  • #31: LMAX在設計Disruptor之前,做了很多實驗去驗證可行性及效能,因此發現了Queue本質上的缺陷 Queue的Enqueue及Dequeue行為都是寫入,所以都會需要把Queue lock住才能做Enqueue/Dequeue 以C#的Queue來說,在Enqueue時要先計算現有的Array長度,加上新增的元素後Copy成新的Array,Dequeuq則是直接取第一個元素,然後把head + 1 為了確保Enqueue/Dequeue的不同執行緒不會拿錯,一次只能有一條執行緒存取 後來ConcurrentQueue有針對這部份做了一些設計上的優化,大幅度減少同時寫入的效能損耗,但本質上還是有一個lock存在 -- 底下不講 C#的Queue與ConcurrentQueue都是以Array來實作,但都會需要lock來解決多執行緒存取時的問題,實務上加上Lock通常都會影響效能,以.Net內建的ConcurrentQueue的實作來說,雖然已經使用了很輕量的Interlocked,但還是有個鎖定等待
  • #32: 因為鎖定的關係,多執行緒同時爭搶Queue的寫入時,只有一條Thread能搶到,其他的Thread就必須先暫停等待通知 執行緒愈多,Context switch造成的延遲浪費也就愈多
  • #33: *要解釋RingBuffer的運行方式 資料結構其實是Array Array裡放的object address會是連續的記憶體空間,有助於CPU的快取機制,相鄰的item會被pre-load到同一個cache line,所以就不需要頻繁地回到主記憶體加載下一個item 而且因為可以預先建立Array裡的object,更新時只更新內容而不是一直建立新的物件,可以避免大量的GC所造成的性能損耗
  • #34: 為了提昇CPU運算的效率,CPU都有L1, L2及L3 cache L1跟L2 cache是每個核心獨立,而L3則是多核心共用 每次從Memory讀取資料到Cache是以一個Cache line為單位,常見的Cache line大小是64bytes 當有2個變數X、Y在相鄰的記憶體,就會被一併讀入同一個Cache line 問題,在多處理器的架構下,不同的執行緒會跑在不同的核心 假設在Core 1執行的指令會去修改變數X的內容,而Core 2執行的指令會去修改變數Y 由於同時對同一份Cache line寫入,就會造成2個核心的Cache miss,必須重新從Memory讀入更新過的變數
  • #35: 如果希望避免剛提到的False sharing,就必須對Cache line做填充的動作,簡單說就是用記憶體空間來換效能 舉列來說,RingBuffer的Tail與Head都是一個長整數,分別由Producer與最後一個Consumer存取,而Producer是會一直改變Head的值,如果Tail與Head放在同一個Cache line 那在多核心的機器就會頻繁的造成False sharing,為了避免這個問題,就可以對這個id做填充的動作
  • #39: Disruptor能夠達到這麼高的OPS,是因為整個架構設計很明確的解決掉影響效能的幾個瓶頸
  • #42: Disruptor在實務的設計與開發,要注意幾個地方 需要處理的資料應該放在Event裡,或是在建構EventHandler的時候就傳進去了