無鎖環形佇列框架Disruptor不同策略說明
阿新 • • 發佈:2018-12-22
* <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>