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