Boost
arrow_drop_down
Boost.Context
M
D

本次发布

Oliver Kowalke
Oliver Kowalke
作者
Dirk Stolle
Dirk Stolle
贡献者 - 新
tkoecker
tkoecker
贡献者 - 新
Philipp Otterbein
贡献者 - 新
Thomas Dickerson
贡献者 - 新
Daniil
贡献者 - 新
Rene Rivera
Rene Rivera
贡献者

依赖项

boost.context

boost.context 是一个基础库,它提供了一种单线程上的协作多任务处理方式。通过为当前线程中的当前执行状态提供一个抽象,包括堆栈(带有局部变量)和堆栈指针,所有寄存器和 CPU 标志,以及指令指针,一个 execution_context 实例代表了应用程序执行路径中的一个特定点。这对于构建更高级别的抽象很有用,例如协程、协作线程(用户空间线程)或 C++ 中 C# 关键字 yield 的等价物。

一个 fiber 提供了挂起当前执行路径并转移执行控制的手段,从而允许另一个 fiber 在当前线程上运行。这种有状态的转移机制使得一个 fiber 可以从嵌套函数中挂起执行,并在之后从挂起处恢复执行。虽然 fiber 代表的执行路径只在单个线程上运行,但它可以在任何给定时间迁移到另一个线程。

线程之间的上下文切换需要系统调用(涉及操作系统内核),在 x86 CPU 上可能成本超过一千个 CPU 周期。相比之下,在 fiber 之间转移控制只需要不到一百个 CPU 周期,因为它们不涉及系统调用,并且是在单个线程内完成的。

boost.context 需要 C++11!

全部时间

Edward Diener
Edward Diener
贡献者
Peter Dimov
Peter Dimov
贡献者
Nikita Kniazev
Nikita Kniazev
贡献者
Naveenaidu
Naveenaidu
贡献者
Daniel James
Daniel James
贡献者
James Cowgill
James Cowgill
贡献者
Sergey Fedorov
Sergey Fedorov
贡献者
Marshall Clow
Marshall Clow
贡献者
Michael Johns
贡献者
Antony Polukhin
Antony Polukhin
贡献者
Claudio Jeker
Claudio Jeker
贡献者
Nick Vrvilo
Nick Vrvilo
贡献者
Eric Astor
Eric Astor
贡献者
Andrey Semashev
Andrey Semashev
贡献者
Ben Wiederhake
Ben Wiederhake
贡献者
Steven Watanabe
Steven Watanabe
贡献者
Ivan A. Melnikov
Ivan A. Melnikov
贡献者
sdarwin
sdarwin
贡献者
Martin Vejbora
贡献者
dixyes
dixyes
贡献者
EGuesnet
EGuesnet
贡献者
George Koehler
George Koehler
贡献者
Julien Schueller
Julien Schueller
贡献者
Damian Jarek
Damian Jarek
贡献者
Kohei Takahashi
Kohei Takahashi
贡献者
Tianqi
Tianqi
贡献者
Debian User
贡献者
David CARLIER
David CARLIER
贡献者
PeterYang12
PeterYang12
贡献者
ltrk2
ltrk2
贡献者
Niels Dossche
Niels Dossche
贡献者
Timo Sandmann
Timo Sandmann
贡献者
Torkel Bjørnson-Langen
Torkel Bjørnson-Langen
贡献者
YunQiang Su
YunQiang Su
贡献者
Reimar Döffinger
贡献者
leha-bot
leha-bot
贡献者
Jiaxun Yang
Jiaxun Yang
贡献者
Andreas Schwab
Andreas Schwab
贡献者
Harish Subramanian
贡献者
Sean Baxter
Sean Baxter
贡献者
Calvin Buckley
Calvin Buckley
贡献者
Zhang Na
Zhang Na
贡献者
Eduard Voronkin
Eduard Voronkin
贡献者
Felix L
Felix L
贡献者
Liryna
Liryna
贡献者
Andrii Batyiev
Andrii Batyiev
贡献者
Arnaud Le Blanc
Arnaud Le Blanc
贡献者
Philippe Daouadi
Philippe Daouadi
贡献者
Mohammad Nejati
Mohammad Nejati
贡献者
Anarthal (Rubén Pérez)
Anarthal (Rubén Pérez)
贡献者
Dmitry
Dmitry
贡献者
Chris Ward
贡献者
CBBBrother
贡献者
Daniil
贡献者
Lars Kanis
贡献者
مهدي شينون (Mehdi Chinoune)
贡献者
r.nowak
贡献者
Peter Kokot
贡献者
Andreas Krebbel
Andreas Krebbel
贡献者
Stephen Kelly
Stephen Kelly
贡献者
Daniela Engert
Daniela Engert
贡献者
Romain Geissler
Romain Geissler
贡献者
Hartmut Kaiser
Hartmut Kaiser
贡献者
Clément Chigot
贡献者
Vladimir Prus
Vladimir Prus
贡献者
SSE4
SSE4
贡献者
brad0
brad0
贡献者
David Seifert
David Seifert
贡献者
Erik Schnetter
Erik Schnetter
贡献者
Nat Goodspeed
Nat Goodspeed
贡献者
Rosen Penev
Rosen Penev
贡献者
Yao Yao
Yao Yao
贡献者
yhsb2k
贡献者
Brian Kuhl
Brian Kuhl
贡献者
Evan Miller
Evan Miller
贡献者
Jürgen Hunold
Jürgen Hunold
贡献者
Ilia K
Ilia K
贡献者
Mohammad Bahoosh
Mohammad Bahoosh
贡献者
Axel Ismirlian
Axel Ismirlian
贡献者
Zhe Wang
Zhe Wang
贡献者
Evgeny Shapovalov
贡献者
Inseok Lee
Inseok Lee
贡献者
Debian User
贡献者
Aaron Gorenstein
Aaron Gorenstein
贡献者
Alexander 'z33ky' Hirsch
Alexander 'z33ky' Hirsch
贡献者
Thomas Kent
Thomas Kent
贡献者
Théo DELRIEU
Théo DELRIEU
贡献者
Augusto Hack
贡献者
tux3
tux3
贡献者
Daniel Glaser
贡献者
Shawn Anastasio
Shawn Anastasio
贡献者
Michał Janiszewski
Michał Janiszewski
贡献者
Neale Ferguson
Neale Ferguson
贡献者
Douglas Gregor
Douglas Gregor
贡献者
Harald van Dijk
Harald van Dijk
贡献者
Nikolai Kochetov
Nikolai Kochetov
贡献者
Lluís Batlle i Rossell
Lluís Batlle i Rossell
贡献者