【发布时间】:2012-01-23 07:57:30
【问题描述】:
有什么方法可以让线程安全的协程与 boost::asio 一起使用?
我希望io_service 在多个线程上运行,并让我的一些处理程序成为协程。
Boost.Coroutine 似乎是一个解决方案,但他们document 表示他们不支持恢复在单独线程中启动的协程。
据我所知,这个问题只有两种可能的解决方案:
- 不要使用协程。使用更冗长(甚至使用 lambda)但功能相同的方法来链接存储状态的回调。
- 强制每个处理程序仅在一个线程中运行。我知道这可以通过简单地为每个线程设置一个单独的 io_service 来实现。顺便说一句,有没有一种简单的方法,类似于 io_service::strand,可以强制一组处理程序在同一个线程中运行?
两者都不是好的解决方案。在一种解决方案中,我失去了协程。另一方面,我失去了大部分多线程能力。
【问题讨论】:
-
@Ralf 是的,我已经看到了,这就是我问这个问题的原因。似乎是一个非常酷的想法,也是编写异步代码的更简单方法。
标签: c++ boost-asio coroutine