kassane/context
`boost.context` library using zig build
425b5ba31b0667439fb72dbf9ce425af6ef1b094
3f36d507f2cd9ba55716336c3fb1843d951830ae
5734e160e08b8df898c7f747000f27a3aafb7b2b
92d126fc440b3cb140c54421d7387c1781d0f1cb
9aca7f5b609a731106a6d70e8dca9a4196dca968
c4ea7e40d365ba28faecef8917d5c3f1e0121bf9
c4ae5e0c429f2792b45e51a19c2153bf975b38ae
boost.context is a foundational library that provides a sort of cooperative multitasking on a single thread. By providing an abstraction of the current execution state in the current thread, including the stack (with local variables) and stack pointer, all registers and CPU flags, and the instruction pointer, a execution_context instance represents a specific point in the application's execution path. This is useful for building higher-level abstractions, like coroutines, cooperative threads (userland threads) or an equivalent to C# keyword yield in C++.
A fiber provides the means to suspend the current execution path and to transfer execution control, thereby permitting another fiber to run on the current thread. This state full transfer mechanism enables a fiber to suspend execution from within nested functions and, later, to resume from where it was suspended. While the execution path represented by a fiber only runs on a single thread, it can be migrated to another thread at any given time.
A context switch between threads requires system calls (involving the OS kernel), which can cost more than thousand CPU cycles on x86 CPUs. By contrast, transferring control among fibers requires only fewer than hundred CPU cycles because it does not involve system calls as it is done within a single thread.
boost.context requires C++11!