C++ 11 发布于 Boost 1.51.0
本次发布
依赖项
boost.context
boost.context 是一个基础库,它在单个线程上提供了一种协作式多任务处理方式。通过提供当前线程中当前执行状态的抽象,包括堆栈(带有局部变量)和堆栈指针、所有寄存器和 CPU 标志以及指令指针,execution_context 实例代表了应用程序执行路径中的一个特定点。这对于构建更高级别的抽象非常有用,例如协程、协作线程(用户空间线程)或 C++ 中的 C# 关键字 yield 的等价物。
协程提供了一种暂停当前执行路径并转移执行控制的方法,从而允许另一个协程在当前线程上运行。这种有状态的转移机制使得协程可以从嵌套函数中暂停执行,并在之后从暂停的地方恢复执行。虽然协程代表的执行路径只在单个线程上运行,但它可以在任何给定时间迁移到另一个线程。
线程之间的上下文切换需要系统调用(涉及操作系统内核),在 x86 CPU 上可能比一千个 CPU 周期还要昂贵。相比之下,协程之间的控制转移只需要不到一百个 CPU 周期,因为它们在单个线程内完成,不涉及系统调用。
boost.context 需要 C++11!