我正在开发一个程序,它由一堆活动对象组成,它们相互发送消息。我使用一个相同的io_service来初始化所有这些对象。所以他们正在努力结束软件生活。
我使用Active Objects,比如说,一个用于文件操作,另一个用于串行IO,另一个用于本地数据库连接,另一个用于通信所有这些。
然而,我无法确定生命短暂的物体。我使用短期对象打开tcp套接字以向远程端点发送快速消息,然后立即配置套接字。我想让这些也异步。
问题是,我是否应该为这些短期对象使用相同的io_service,还是应该为每个套接字创建一个新的io_service?
答案 0 :(得分:1)
我正在开发一个程序,它由一堆活动对象组成,它们相互发送消息。我使用一个相同的io_service来初始化所有这些对象。所以他们正在努力结束软件生活。
听起来很合适。如果您需要在具有多个处理器的计算机上提高操作效率,我建议使用Chris Kohlhoff的recipe。
然而,我无法确定生命短暂的物体。我使用短期对象打开tcp套接字以向远程端点发送快速消息,然后立即配置套接字。我想让这些也异步。
拥有少量(呃)长期存在的asio io_service对象(例如,您可以创建与机器上的处理器相同数量的io_services)和使用io_service的短期对象并没有错。我会说这也更有效率,因为你不必启动一个线程来调用每个(短命?)io_service上的io_service::run
,你可以避免不必要的上下文切换。
如果您希望/需要避免在线程中阻塞,也需要使套接字异步,特别是如果存在网络问题等。