我想获得一个具有 MIT 许可证(或更宽松)的轻量级、便携式光纤库。Boost.Coroutine 不合格(不是轻量级的),Portable Coroutine Library 和 Kent C++CSP(都是 GPL)也不合格。
编辑:你能帮我找一个吗?:)
我想获得一个具有 MIT 许可证(或更宽松)的轻量级、便携式光纤库。Boost.Coroutine 不合格(不是轻量级的),Portable Coroutine Library 和 Kent C++CSP(都是 GPL)也不合格。
编辑:你能帮我找一个吗?:)
两者都是为 C 编写的。
实际上,我过去曾在博客上写过这个。看一看!我希望它能回答你的问题。在其中,我介绍了许多库,我对那些对系统编程(异步 IO)有用的库特别感兴趣。
该报道中明显没有Boost.Coroutine,我将在这里讨论。Boost.Coroutine 在概念上可能被认为是“重量级”(就其类型族而言),但实现非常有效。真正的问题是 Boost.Coroutine 是不完整的,并且(最后我检查)远未完成。我花了一些时间尝试与作者一起解决它的非入门问题,因为我真的很期待将它与 Boost.Asio 结合使用(这是 Boost.Coroutine 的主要目标之一),但作者没有有时间将他的工作带到 Boost 正式审查阶段。
对于超轻量级“线程”,请查看维基百科文章底部的 Protothreads。
现在有了 Boost 许可证,您有两个更好的选择:
如果 Boost 看起来很重,有帮助的人已经将 Boost() 的相关部分提取fcontext
为一个独立的库,例如deboost.context。
有一个非常快速和轻量级的 C 非对称协程库 - libaco。
它非常小,非常快并且非常节省内存:
除了实现生产就绪的 C 协程库外,这里还有一份详细的文档,介绍了如何实现最快和正确的协程库,并附有严格的数学证明;
它的 LOC 不超过 700 个,但具有您可能希望从协程库中获得的全部功能;
基准部分显示,在 AWS c5d.large 机器上,协程之间的一次上下文切换只需要大约 10 ns(对于独立堆栈的情况);
用户可以选择使用独立堆栈或共享堆栈(可以与其他人共享)创建一个新的协程;
它的内存效率极高:同时运行 10,000,000 个 co 只需要 2.8 GB 物理内存(使用 tcmalloc 运行,每个 co 具有 120B 复制堆栈大小配置)。
它也有非常详细的文档。
PS:
它遵循 Apache 许可证,版本 2.0。