1. 程式人生 > >無鎖環形佇列框架Disruptor不同策略說明

無鎖環形佇列框架Disruptor不同策略說明

* <pre>
*   BlockingWaitStrategy: 這是預設的策略,使用BlockingWaitStrategy和使用BlockingQueue是非常類似的,
* 他們都使用鎖和條件Condition進行資料的監控和執行緒的喚醒,因為涉及到執行緒的切換,BlockingWaitStrategy策略
* 是最節省cpu,但是高併發情況下效能表現最差的等待策略.
*   SleepingWaitStrategy: 這個策略也是對CPU的使用率非常保守的.它會在迴圈中不斷等待資料.它會先進行自旋等待
* 如果不成功,則使用Thread.yield()讓出CPU,並最終使用
LockSupport.parkNanos(1)進行執行緒休眠,以確保不佔用太多的 * CPU資源.因此這個策略會產生比較高的平均延時.典型的應用場景就是非同步日誌. * YieldingWaitStrategy: 這個策略用於低延時的場合.消費者執行緒會不斷迴圈監控緩衝區變化, *在迴圈內部使用Thread.yield()讓出CPU給別的執行緒執行時間,如果需要一個高效能的系統,並且對延時比較有嚴格的要求, *可以考慮這種策略,最好有多餘消費者執行緒數量的邏輯cpu數量,(邏輯cpu指雙核四執行緒種的四執行緒 * BusySpinWaitStrategy: 採用死迴圈,消費者執行緒會盡最大努力監控緩衝區的變化
. * 對延時非常苛刻的場景使用,物理cpu數量必須大於消費者執行緒數量 * </pre>