什么是在多个线程上使用单个io_service的好处?

时间:2016-11-06 22:30:57

标签: c++ c++11 boost-asio

我正在阅读有关Asio的一些答案,以及一个突出的模式,在示例和here中都是SO,是使用单个io_service并在处理打开,发送和处理的工作人员之间共享它通过套接字接收消息。

在多个套接字抽象之间共享io_service有什么好处吗?为什么不让每个人都拥有自己的io_service?

2 个答案:

答案 0 :(得分:1)

据我所知,io_service"拥有"资源。如果您有一个io_service处理所有asio函数,那么您可以管理优先级。如果你有多个io_service实例,那么所有"拥有"相同的资源,然后他们会发生冲突。

答案 1 :(得分:0)

我尝试了这种模式,并且不建议你只使用一些非常具体的场景。相反,我推荐"始终只使用一个io_service"如果您需要,可以使用多个io_services(每个都在专用线程中运行)。

这样做的原因是,如果您使用来自多个线程的一个io_service,则可以从任何参与线程调用所有回调(完成处理程序),并且您必须为它们提供额外的同步。在"资源属于一个在一个线程上执行的io_service"模型你不需要这个,因为没有并发处理程序将从另一个线程执行。