我正在实现需要维护非常大数量(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