【问题标题】:Implementing a Multi-task Scheduler and Executer using Boost Coroutines使用 Boost Coroutines 实现多任务调度器和执行器
【发布时间】:2016-08-23 14:36:06
【问题描述】:

我正在寻找一种方法来使用 Boost Stackfull Coroutines 作为单核中的多任务执行器,而不是使用线程。我习惯于使用asyncio module 开发 Python 代码,我想使用 Boost Coroutines(如果可能的话,使用 Boost.Coroutine2)来复制相同的行为。

我在 Google 的搜索返回了 some old Boost documentation,解释了我如何使用 Boost.Coroutine 库来做到这一点。 出于某种我不知道的原因,the current Boost.Coroutine documentation 不相等,并且不包含任何可能与旧版本相关的信息。

有没有办法让我像使用 Python 异步协程一样使用 Boost.Coroutines?

【问题讨论】:

  • 你可能想添加 Python 标签来吸引一些 Python 人群:)
  • 不知道这是不是个好主意,但还是添加了。
  • 对不起!我选词不好!我的意思是,一个任务调度器和执行器!

标签: c++ python-3.x c++11 boost c++14


【解决方案1】:

我喜欢在 Boost.Asio 中使用协程,因为后者甚至有 some integration 和前者。

boost::asio::io_service io_service;

// ...

boost::asio::spawn(io_service, [&] (boost::asio::yield_context yield) {
    // here, the asynchronous operations causes the coroutine to yield
    std::size_t bytes = socker.async_read_some(buffer, yield);
    // do some other stuff
});

io_service.run();

Boost.Asio 有自己的full example

io_service 将作为执行器工作,spawn 提供了一种使用协程完成所有这些工作的清晰方法。

【讨论】:

  • 是的,确实如此,但我无法使用在等待期货时暂停执行的协程来扩展他们的示例。我也找不到这样做的例子或方法。
  • @Claymore 好点。不幸的是,我们似乎必须等待并发 TS 和网络 TS 能够开箱即用地执行此类操作。你可以在上游查看 asio,可能它有一些未来的支持。
猜你喜欢
  • 1970-01-01
  • 2017-03-15
  • 2020-03-26
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 2014-12-13
  • 2012-10-06
  • 1970-01-01
相关资源
最近更新 更多