boost coroutine2

翻译 2018年04月17日 20:40:44

Boost.Coroutine2 提供了非对称协程。

通常使用非对称协程实现生产队列

stackful

每个协程实例都有自己的栈.

与Stackless协程相比,stackful协程允许调用任意子调用栈挂起的操作,允许出入递归操作。

move-only

协程只能移动。

如果它是可复制的,那么它所有分配在栈上的对象都可以被复制。如果这些对象是RAII类,会导致不明确行为。当第一个协程拷贝终止时(栈展开),RAII类析构器会释放它管理的资源。当第二个协程拷贝终止时,同一个析构器会尝试重复释放同样的资源,导致不明确行为。

clean-up

协程析构会展开相关栈。

协程的构造器允许你自定义一个栈分配器。栈分配器可自由重新分配将来使用的栈或缓存。

segmented stack

coroutine<>::push_type and coroutine<>::pull_type 支持分段栈 (按需增长).

通常不可能精确地估计所需的堆栈大小-在大多数情况下,会分配过多内存(浪费虚拟地址空间)。

协程构造器开始时会定义一个默认(最小)容量,这个最小的栈容量是页面大小的最大值和信号栈的典型尺寸(macro SIGSTKSZ on POSIX)。

GCC (4.7)支持 segmented stacks.

析构器释放相关栈,实施者可以自由重新分配的栈或缓存供以后使用。

context switch

协程通过每个上下文切换的底层ABI保存和恢复注册(使用 Boost.Context)。

上下文切换通过 coroutine<>::push_type::operator() and coroutine<>::pull_type::operator()完成。

Warning

Calling coroutine<>::push_type::operator() and coroutine<>::pull_type::operator() from inside the same coroutine results in undefined behaviour.

警告:从同一个协程内部调用coroutine<>::push_type::operator() and coroutine<>::pull_type::operator() 会导致不明确行为

举例,下面的代码会出现不明确行为:

boost::coroutines2::coroutine<void>::push_type coro(
    [&](boost::coroutines2::coroutine<void>::pull_type& yield){
        yield();
});
coro();

c++协程2 (boost::coroutine)

#include #include #include using boost::coroutines::coroutine; void cooperative(coroutine::pus...
  • chenhaifeng2016
  • chenhaifeng2016
  • 2017-04-21 11:25:05
  • 1973

boost::coroutine2(stackful协程库)

协程可以很轻量的在子例程中进行切换,它由程序员进行子例程的调度(即切换)而不像线程那样需要内核参与,同时也省去了内核线程切换的开销,因为一个协程切换保留的就是函数调用栈和当前指令的寄存器,而线程切换需...
  • u013524455
  • u013524455
  • 2017-11-11 18:46:04
  • 881

c++协程5(boost::coroutine2)

#include #include #include int main() { int i = 0; boost::coroutines2::coroutine::p...
  • chenhaifeng2016
  • chenhaifeng2016
  • 2017-04-26 20:02:00
  • 1960

用boost::bind构造boost::coroutine

class TestCoro { ... typedef boost::coroutines::coroutione Coro; void CoroFun(Cor...
  • jq0123
  • jq0123
  • 2013-11-22 15:51:17
  • 2847

boost::asio::coroutine 文档翻译 + 源码解析

文档地址 http://www.boost.org/doc/libs/1_60_0/doc/html/boost_asio/reference/coroutine.html 文档翻译协程提供实现不...
  • cchd0001
  • cchd0001
  • 2016-02-23 14:24:11
  • 2714

Boost coroutine 协程

摘要: 本文介绍协程的基本概念,以及协程在异步IO编程模式里起的作用——大大简化异步回调的实现与逻辑处理。 什么协程 协程这个概念在计算机科学里算是一个老概念了,随着现代计算机语言与多核心...
  • yhcfly
  • yhcfly
  • 2014-01-16 20:46:32
  • 3198

boost part3

  • 2011年07月28日 00:54
  • 20MB
  • 下载

boost part2

  • 2011年07月28日 00:43
  • 20MB
  • 下载

boost源代码的发生大幅

  • 2008年08月30日 16:26
  • 12.41MB
  • 下载

boost part4

  • 2011年07月28日 00:57
  • 2.96MB
  • 下载
收藏助手
不良信息举报
您举报文章:boost coroutine2
举报原因:
原因补充:

(最多只允许输入30个字)