似乎所有示例总是显示在所有线程中运行相同的io_service。
你能开始多个io_services吗?这就是我想做的事情:
在主线程中启动io_service A以处理用户输入......
在另一个线程中启动另一个io_service B,然后可以启动一堆worker 所有线程共享io_service B.
io_service A上的用户可以在io_service B上“发布”工作,以便在工作池上完成,但是在io_service A上没有工作,即主线程。
这可能吗?这有意义吗?
由于
答案 0 :(得分:2)
根据我的经验,如果每个cpu一个io_service
或每个进程一个表现更好,它实际上取决于应用程序。几年前关于这个主题的asio-users邮件列表进行了讨论。
Boost.Asio文档在HTTP Server 2和HTTP Server 3示例中提供了一些很好的示例showing these two技术。但请记住,第二个HTTP服务器只显示如何使用此技术,而不是何时或为何使用它。这些问题需要通过分析您的申请来解答。
通常,在使用Boost.Asio
创建应用程序时,应使用以下顺序io_service
io_service
对象答案 1 :(得分:1)
好问题!
是的,一个人可能。在我正在开发的应用程序中,我已将应用程序分解为负责系统不同方面的单独组件。每个组件都在自己的线程中运行,有自己的一组定时器,使用asio自己的网络I / O.从可测试性/设计角度来看,对我来说似乎更干净,因为没有任何组件可以干扰另一个组件,但我有待纠正。我想我可以重写在io服务中传递的所有内容作为参数,但目前还没有发现需要这样做。
回到你的问题,你可以做任何你想做的事情,IMO更多的是试一试,如果你遇到任何问题就改变它。
另外,您可能想看看Sam Miller在WRT处理用户输入的不同帖子中指出的内容(即如果您使用的是控制台):https://stackoverflow.com/questions/5210796/boost-asio-how-to-write-console-server