boost :: asio在线程中启动不同的服务?

Oli*_*r K 5 c++ boost boost-asio

似乎所有示例总是显示在所有线程中运行相同的io_service.

你能开始多个io_services吗?这是我想做的事情:

在主线程中启动io_service A以处理用户输入...

在另一个线程中启动另一个io_service B,然后可以启动一堆工作线程全部共享io_service B.

io_service A上的用户可以在io_service B上"发布"工作,以便它在工作池上完成,但是在io_service A上没有工作,即主线程.

这可能吗?这有意义吗?

谢谢

Ral*_*alf 1

好问题!

是的,这是可能的。在我当前正在开发的应用程序中,我已将应用程序分解为负责系统不同方面的单独组件。每个组件都在自己的线程中运行,有自己的一组计时器,使用 asio 执行自己的网络 I/O。从可测试性/设计的角度来看,它对我来说似乎更干净,因为没有一个组件可以干扰另一个组件,但我愿意接受纠正。我想我可以重写 io 服务中作为参数传递的所有内容,但目前还没有发现需要这样做。

所以回到你的问题,你可以做任何你想做的事情,在我看来,这更多的是尝试一下,如果遇到任何问题就改变它。

另外,您可能想看看 Sam Miller 在处理用户输入的另一篇 WRT 文章中指出的内容(即如果您使用的是控制台):/sf/ask/364755751/ -如何编写控制台服务器