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解析和使用佇列
- 處理線上RabbitMQ佇列阻塞MQ佇列
- 多執行緒學習-Disruptor佇列執行緒佇列
- 關於Disruptor處理流程
- 高效能無鎖佇列 Disruptor 初體驗佇列
- 常見佇列等待事件處理思路佇列事件
- 通過佇列實現批量處理佇列
- 你應該知道的高效能無鎖佇列Disruptor佇列
- Looper中的訊息佇列處理機制OOP佇列
- 請教 Disruptor 同 Actor 模型的區別模型
- 棧與佇列理論基礎佇列
- 訊息佇列,推拉模式的區別在哪?佇列模式
- Weblogic JMS佇列阻塞問題處理Web佇列
- 【故障處理】佇列等待之TX - allocate ITL entry引起的死鎖處理佇列
- [轉]使用 SAX 處理 XML 文件 和與DOM的區別XML
- synchronized 中的同步佇列與等待佇列synchronized佇列
- 總結下三種stl佇列的api區別佇列API
- Python中堆、棧、佇列之間的區別Python佇列
- 如此狂妄,自稱高效能佇列的Disruptor有啥來頭?佇列
- 從零開始實現lmax-Disruptor佇列(五)Disruptor DSL風格API原理解析佇列API
- php訂單延時處理-延時佇列PHP佇列
- 維護你的請求佇列,處理token異常佇列
- Angular和SAP C4C的事件處理佇列Angular事件佇列
- CPU(中央處理器)和GPU(影像處理器)的區別GPU
- Python 編碼處理之 str與Unicode的區別與使用PythonUnicode
- 異常處理機制(一)之throw與throws的區別
- 求深入講解一下Disruptor的處理方式
- JUC併發程式設計與高效能記憶體佇列disruptor實戰-上程式設計記憶體佇列
- JUC併發程式設計與高效能記憶體佇列disruptor實戰-下程式設計記憶體佇列
- 陣列中&a與&a[0]的區別陣列
- 實用!Swoole + Redis 佇列 訂單處理系統Redis佇列
- 故障處理】佇列等待之enq: US - contention案例佇列ENQ
- 【故障處理】佇列等待之enq: US - contention案例佇列ENQ
- 【故障處理】佇列等待之enq IV - contention案例佇列ENQ
- 指標 與 陣列 以及 a 與 &a的區別指標陣列
- 當 Vue 處理陣列與處理純物件的方式一樣Vue陣列物件
- MQ 訊息佇列的解耦、介面非同步處理、削峰MQ佇列解耦非同步