我正在實現需要維護非常大數量(100K或更多)長連接的自定義服務器。服務器只是在套接字之間傳遞消息,並沒有做任何嚴肅的數據處理。消息很小,但其中許多消息每秒都會收到/發送。減少延遲是目標之一。我意識到使用多核並不會提高性能,因此我決定通過調用run_one
或poll
方法io_service
對象在單線程中運行服務器。無論如何,多線程服務器將更難實施。Boost Asio單線程性能
什麼是可能的瓶頸?系統調用,帶寬,完成隊列/事件解複用?我懷疑調度處理程序可能需要鎖定(這是由asio庫內部完成的)。是否可以禁用boost.asio中的隊列鎖定(或任何其他鎖定)?
編輯:相關的問題。多線程可以提高系統調用性能嗎?我的感覺是,因爲系統調用是內核原子/同步的,添加更多的線程不會提高速度。
如果您在一個線程中運行所有內容,則不需要任何(手寫)鎖。 – 2013-02-25 18:29:23
使用多核可能會提高性能 - 請參閱http://cmeerw.org/blog/748.html#748和http://cmeerw.org/blog/746.html#746,瞭解去年所做的一些基準測試。 – cmeerw 2013-02-25 19:58:30