Boost Asio与可处置对象共享相同的io_service

时间:2018-04-30 13:50:10

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

我正在开发一个程序,它由一堆活动对象组成,它们相互发送消息。我使用一个相同的io_service来初始化所有这些对象。所以他们正在努力结束软件生活。

我使用Active Objects,比如说,一个用于文件操作,另一个用于串行IO,另一个用于本地数据库连接,另一个用于通信所有这些。

然而,我无法确定生命短暂的物体。我使用短期对象打开tcp套接字以向远程端点发送快速消息,然后立即配置套接字。我想让这些也异步。

问题是,我是否应该为这些短期对象使用相同的io_service,还是应该为每个套接字创建一个新的io_service?

1 个答案:

答案 0 :(得分:1)

  

我正在开发一个程序,它由一堆活动对象组成,它们相互发送消息。我使用一个相同的io_service来初始化所有这些对象。所以他们正在努力结束软件生活。

听起来很合适。如果您需要在具有多个处理器的计算机上提高操作效率,我建议使用Chris Kohlhoff的recipe

  

然而,我无法确定生命短暂的物体。我使用短期对象打开tcp套接字以向远程端点发送快速消息,然后立即配置套接字。我想让这些也异步。

拥有少量(呃)长期存在的asio io_service对象(例如,您可以创建与机器上的处理器相同数量的io_services)和使用io_service的短期对象并没有错。我会说这也更有效率,因为你不必启动一个线程来调用每个(短命?)io_service上的io_service::run,你可以避免不必要的上下文切换。

如果您希望/需要避免在线程中阻塞,也需要使套接字异步,特别是如果存在网络问题等。