有什么办法可以让线程安全协程和boost :: asio一起使用吗?线程安全协同程序与asio
我想要一个io_service
在多个线程上运行,并让我的一些处理程序成为协同程序。
Boost.Coroutine似乎是一个解决方案,但他们document,他们不支持恢复在单独的线程中启动的协程。
据我所知,只有两到这个问题可能的解决方案:
- 不要使用协同程序。使用更详细的(即使与拉姆达),但同样功能的链接回调存储状态的方法。
- 强制每个处理程序只能在一个线程中运行。我知道这是可能的,只需为每个线程分别设置一个io_service。顺便说一句,有没有一种简单的方法,类似于io_service :: strand,强制一组处理程序在同一个线程中运行?
两者都不是很好的解决方案。在一个解决方案中,我失去了协程。另一方面,我失去了大部分多线程能力。
仅供参考:你见过http://blog.think-async.com/2009/08/secret-sauce-revealed.html和http://blog.think-async.com/2010/03/potted- guide-to-stackless-coroutines.html? – Ralf
@Ralf是的,我看到了,这就是为什么我问这个问题。看起来像一个非常酷的想法,并且是一种编写异步代码的更简单的方法。 – Lalaland