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