分佈式系統中讀寫模式的場景裏,存在多個用戶(卷)同時寫的狀況。對於單個盤而言,就是可能存在多個線程同時讀寫的場景。傳統的作法能夠經過互斥鎖的方式避免併發讀寫的影響,C++也提供了boost::lock_free方式,此外DPDK 也提供了無鎖 ring 的庫。html
因爲這個隊列是在IO路徑上,要求訪問這個隊列高併發、低延時,爲此須要評估上面的幾種方法的總體性能。併發
這個是C++ 標準庫提供的在拿不到鎖的時候能夠等待的無鎖隊列。less
這個是C++ boost 庫提供的基於CAS實現的無鎖隊列,和C++ 標準庫中的
queue接口很像,不一樣的是,他的隊列長度有限。分佈式
這個是DPDK EAL層提供的一個基於CAS (compary and swap) 實現的元素個數有限的無鎖 循環隊列,一般用在SPDK memory pool中,或者用在和DPDK應用程序裏。ide
能夠看到,經過使用DPDK中的無鎖隊列,可以提升系統總體的IOPS和吞吐。高併發
boost::lock_free 和 mutex 在多生產者多消費者場景下的性能:
https://blog.csdn.net/wag2765/article/details/84793967性能
boost:lockfree 用法:
https://www.boost.org/doc/libs/1_55_0/doc/html/lockfree.html.net