disruptor佇列SleepingWaitStrategy與YieldingWaitStrategy處理的區別
SleepingWaitStrategy
如果沒有可用的序列號,則:
首先,自旋重試100次(此值可設定,預設200次),如果在重試過程中,存在可用的序列號,則直接返回可用的序列號。
否則,如果重試指定次數以後,還是沒有可用序列號,則繼續自旋重試,但這時每重試一次,便呼叫Thread.yield方法,放棄CPU的使用權,讓其它執行緒可以使用CPU。當該執行緒再次獲取CPU使用權時,繼續重試,如果還沒有可用的序列號,則繼續放棄CPU使用權等待。此迴圈最多100次。
最後,如果還沒有可用的序列號,則呼叫LockSupport.parkNanos方法阻塞執行緒,直到存在可用的序列號。當LockSupport.parkNanos方法由於超時返回後,如果還沒有可用的序列號,則該執行緒獲取CPU使用權以後,可能繼續呼叫LockSupport.parkNanos方法阻塞執行緒。
YieldingWaitStrategy
如果沒有可用的序列號,則
首先,自旋重試100次(此值可設定,預設100次),如果在重試過程中,存在可用的序列號,則直接返回可用的序列號。
否則,如果重試指定次數以後,還是沒有可用序列號,則呼叫Thread.yield方法,放棄CPU的使用權,讓其它執行緒可以使用CPU。當該執行緒再次獲取CPU使用權時,繼續重試,如果還沒有可用的序列號,則繼續放棄CPU使用權等待。
相關文章
- 高效能佇列——Disruptor佇列
- 單機最快的佇列Disruptor解析和使用佇列
- 多執行緒學習-Disruptor佇列執行緒佇列
- 處理線上RabbitMQ佇列阻塞MQ佇列
- 常見佇列等待事件處理思路佇列事件
- 高效能無鎖佇列 Disruptor 初體驗佇列
- 你應該知道的高效能無鎖佇列Disruptor佇列
- 棧與佇列理論基礎佇列
- Python中堆、棧、佇列之間的區別Python佇列
- 訊息佇列,推拉模式的區別在哪?佇列模式
- Angular和SAP C4C的事件處理佇列Angular事件佇列
- 維護你的請求佇列,處理token異常佇列
- 如此狂妄,自稱高效能佇列的Disruptor有啥來頭?佇列
- php訂單延時處理-延時佇列PHP佇列
- 故障處理】佇列等待之enq: US - contention案例佇列ENQ
- 【故障處理】佇列等待之enq: US - contention案例佇列ENQ
- 總結下三種stl佇列的api區別佇列API
- 從零開始實現lmax-Disruptor佇列(五)Disruptor DSL風格API原理解析佇列API
- synchronized 中的同步佇列與等待佇列synchronized佇列
- CPU(中央處理器)和GPU(影像處理器)的區別GPU
- 異常處理機制(一)之throw與throws的區別
- JUC併發程式設計與高效能記憶體佇列disruptor實戰-下程式設計記憶體佇列
- JUC併發程式設計與高效能記憶體佇列disruptor實戰-上程式設計記憶體佇列
- 實用!Swoole + Redis 佇列 訂單處理系統Redis佇列
- 當 Vue 處理陣列與處理純物件的方式一樣Vue陣列物件
- MQ 訊息佇列的解耦、介面非同步處理、削峰MQ佇列解耦非同步
- 自增長列和序列的區別(identity與sequence的區別)IDE
- Golang 後臺守護程式佇列處理方式小結Golang佇列
- C#陣列與集合的區別C#陣列
- 物件陣列與一般陣列的區別物件陣列
- W3C的事件處理和IE的事件處理有哪些區別?事件
- Go語言的 序列處理 和 並行處理 有什麼區別 ?Go並行
- c# 透過訊息佇列處理高併發請求實列C#佇列
- 使用RabbitMQ訊息佇列來處理大規模的資料流MQ佇列
- 從構建分散式秒殺系統聊聊Disruptor高效能佇列分散式佇列
- 詳解RPC遠端呼叫和訊息佇列MQ的區別RPC佇列MQ
- 老生常談——利用訊息佇列處理分散式事務佇列分散式
- C#使用執行緒安全佇列ConcurrentQueue處理資料C#執行緒佇列