無鎖佇列是否不適用於大容量應用場景?

時間 2021-05-30 00:56:59

1樓:holidays

題主可以看下dpdk的rte_ring實現的無鎖佇列,支援多生產者多消費者;

實現上使用了cas原子操作,結構是環形佇列,思路是使用預約生產(消費)來避免多個生產者(消費者)操作同一塊區間。

2樓:

題主你好。

針對大容量高效能場景,你所說的問題的確存在。

陣列模式的問題在於它是有界的。鍊錶模式的問題在於它基於CAS的操作本身就不夠快,同時像是經典的MSQueue,本身是不會快於乙個執行緒的操作的,雲風的 BLOG: 樂觀鎖和悲觀鎖。

針對上面兩個問題,我向你推薦obqueue:

它有兩個版本,non-blocking版本和可作為工作佇列的blocking版本(基於futex實現)。

它本質上是基於鏈結的陣列實現,速度非常快,明顯超越了MSQueue,它的gurantee progress不是lock-free,而是obstruction-free。

非常適合大容量高效能場景。

3樓:「已登出」

高效能,大容量。。首先,你要實現乙個執行緒安全的記憶體池,既然追求效能那麼資源預分配是必須的,然後空閒佇列就不需要了。。你可以參考dpdk的rte_mempool

4樓:initcode init

很多人實現所謂的無鎖佇列基本都是用原子操作為基礎的自旋鎖,這種東西在多核下是白白浪費cpu的,所以有的人在自旋鎖迴圈的時候加上藝術就休眠(比如 pause指令,或者win32的YieldProcessor),但是這種東西雖然休眠,還是白白的在浪費cpu,所以在很多核的情況下,所謂以原子操作自旋模式的無鎖程式設計都是擺設!

再來說下互斥鎖,其實互斥鎖也是原子操作實現的,為什麼互斥鎖比原子自旋鎖在多核下好?

自旋鎖是一直迴圈空轉,而互斥鎖是執行緒休眠和喚醒,不會做無用功一直迴圈!

Haskell 不適用於生產環境嗎?

貌似aonao 個人感覺,大部分專案不適合。首先,Haskell是一門學術語言,是學術研究的試驗田,而工程是講究成本收益的,兩者努力的方向不同,Haskell沒有理由做出讓步。其次,Haskell學習曲線過於陡峭,編碼風格過於理想化。工程問題大都涉及io,不是其應用場景。僅有的一些適用場景,又不是你...

MacBook Air 是否適用於辦公?

Change 蘋果公司對Macbook Air的定位就是 攜帶 續航,滿足日常的辦公娛樂需求。2020款的Macbook Air實測續航10小時左右。重約1.29kg,不到3斤。題目入手Macbook Air 沒問題的。我本人現在用的就是2020款Macbook Air,沒遇到因軟體不能用而影響工作...

「珍愛生命」是否適用於蚊蟲?

總覺得不該殺死他們,畢竟都是生命,每次都盡可能趕走而不是拍死。但有時候把我實在惹惱了就會大開殺戒一邊默念 弄死你們!叫你們咬我,該!然後發洩完再默念阿彌陀佛。也沒有啥負罪感。本就沒有什麼是否適用,尊重生命存有滿滿善意和無情滅殺在對待蚊蟲的問題上和諧統一。 韓東燃 珍愛生命 用於蚊蟲是有點極端了。愛 ...