minicoro
Minicoro 是一个单文件库,用于在 C 中使用非对称协程。
该 API 受 Lua 协程 的启发,但考虑到了 C 语言的使用。
该项目主要是为了开发一个协程后端
用于 Nelua 编程语言。
库组件实现灵感来自 Mike Pall 的 Lua Coco。
特性
- 多层异步协程。
- 支持协程嵌套(从另一个协程恢复)。
- 支持自定义分配器。
- 存储系统,允许在 yield 和 resume 之间传递值。
- 可自定义堆栈大小。
- 支持可扩展堆栈,在启用虚拟内存分配器时占用内存小。
- 协程 API 设计灵感来自 Lua,考虑到 C 语言的使用情况。
- 可在任何 C 函数中执行 yield。
- 可在多线程应用程序中使用。
- 跨平台。
- 简洁、自包含且无外部依赖。
- 源代码可读,有文档说明。
- 通过汇编、ucontext 或 fiber 实现。
- 体积小、效率高。
- 可在大多数 C89 编译器中使用。
- API 容易出错,在误用时返回正确的错误代码。
- 支持在 Valgrind、ASan (AddressSanitizer) 和 TSan (ThreadSanitizer) 下运行。
支持的平台
如果编译器和 CPU 支持,则默认使用汇编方法;否则,将使用 ucontext 或 fiber 方法作为回退方案。汇编方法非常高效,仅需几个周期即可创建、恢复、暂停或销毁一个协程。