讀rationale,提振:: circular_buffer看起來前途無量:爲什麼boost :: circular_buffer在我的基準測試中這麼慢?
適宜實時和性能關鍵應用。
快速定時插入和刪除正面和背面的元素。
當我運行一個簡單的基準測試,模擬我的使用情況下,使用它作爲一個字節的緩衝區:
- 寫一個更大的塊
- 讀取小塊,直到空
- 重複
的表現絕對糟糕,比我自己的hack和spsc_queue慢了不止4000x。
lin : 101 // 10240x
lock: 109 // 10240x
circ: 427 // 10x
注意,對於circular
的loopcount是10
併爲他人loopcount是10*1024
。參見工作示例here。
我是否完全錯誤地使用它,或者只是沒有設計基本的/ POD類型?
編輯:
採用與所提供的變化基準沒有完全解決上MSVC2015問題。還有100倍的因素。
lin : 69 // 10240x
lock: 79 // 10240x
circ: 9688 // 10240x
一次如此緩慢插入幾個項目是有問題的。分配可以在這種特殊情況下工作,因爲在插入之前緩衝區已經耗盡,但這不是一個通用的解決方案。恢復spsc_queue在所有方面都勝出,它的速度很快,可以在不耗盡的情況下使用,並且可以在多線程環境中使用(在單個生產者單個用戶場景中)。
哼。在確定迭代在基準(!)中相同之後,仍然存在較大的差距。尋找更多線索 – sehe
隨着數據量的增加,時代正在發生線性變化,所以我相當肯定優化器沒有引起令人驚訝的結果,但是,是的,我確信我會使用結果。 – Thomas
好點。儘管如此,最好是明確的。另一個好的方面是'-DNDEBUG'或'-DBOOST_CB_DISABLE_DEBUG'。我在分析數據 – sehe