我正在实现需要维护大量(100K 或更多)长期连接的自定义服务器。服务器只是在套接字之间传递消息,它不做任何严肃的数据处理。消息很小,但其中许多消息每秒都会接收/发送。减少延迟是目标之一。我意识到使用多个内核不会提高性能,因此我决定通过调用run_one
或对象poll
方法在单个线程中运行服务器io_service
。无论如何,多线程服务器将更难实现。
可能的瓶颈是什么?系统调用、带宽、完成队列/事件多路分解?我怀疑调度处理程序可能需要锁定(由 asio 库在内部完成)。是否可以在 boost.asio 中禁用队列锁定(或任何其他锁定)?
编辑:相关问题。多线程时系统调用性能会提高吗?我的感觉是,因为系统调用是由内核原子/同步的,所以添加更多线程不会提高速度。