【问题标题】:Lightweight, portable C++ fibers, MIT license轻量级、可移植的 C++ 光纤,MIT 许可证
【发布时间】:2010-11-20 02:52:29
【问题描述】:

我想获得一个具有 MIT 许可证(或更宽松)的轻量级、便携式光纤库。 Boost.Coroutine 不合格(非轻量级),Portable Coroutine Library 和 Kent C++CSP(均为 GPL)也不合格。

编辑:你能帮我找一个吗? :)

【问题讨论】:

  • 嘿,我好像为 All Them Altruists 找到了一个未开发的区域。 :)

标签: c++ licensing portability fiber


【解决方案1】:

list of implementations for C

对于超轻量级“线程”,请查看维基百科文章底部的 Protothreads。

【讨论】:

  • 我最终找到了sics.se/~adam/pt/download.html,看起来很有希望。
  • 被证明是具有隐式状态的 switch/case 包装器。不是我想要的,但还是有点意思。
【解决方案2】:
  1. Libtask: MIT 许可证
  2. Libconcurrency: LGPL(比 MIT 更严格一点,但它是一个函数式库!)

两者都是为 C 编写的。

【讨论】:

  • 看起来 setcontext() / setmcontext() 可能适用于某些平台,但除此之外看起来很容易移植。
  • cygwin下没有setcontext。
【解决方案3】:

我实际上在过去blogged 对此有所了解。看一看!我希望它能回答你的问题。在其中,我介绍了许多库,我对那些对系统编程(异步 IO)有用的库特别感兴趣。

Boost.Coroutine 明显不在该报道中,我将在这里讨论。 Boost.Coroutine 在概念上可能被认为是“重量级”(就其类型家族而言),但实现非常有效。真正的问题是 Boost.Coroutine 是不完整的,并且(最后我检查)远未完成。我花了一些时间尝试与作者一起解决它的非入门问题,因为我真的很期待将它与 Boost.Asio 结合使用(这是 Boost.Coroutine 的主要目标之一),但作者没有有时间将他的工作带到 Boost 正式审查阶段。

【讨论】:

【解决方案4】:

现在有了 Boost 许可证,您有两个更好的选择:

【讨论】:

    【解决方案5】:

    有一个超快速且轻量级的 C 非对称协程库 - libaco

    它真的很小,速度很快,而且非常节省内存:

    随着生产就绪的 C 协程的实现 库,这里是有关如何实现的详细文档 最快和正确的协程库,也有严格的 数学证明;

    它的 LOC 不超过 700,但具有完整的 协程库中可能需要的函数;

    基准部分 表明只有一次协程之间的上下文切换 在 AWS 上大约需要 10 ns(对于独立堆栈的情况) c5d.大型机;

    用户可以选择创建一个新的协程 独立堆栈或共享堆栈(可以与他人共享);

    非常节省内存:10,000,000 数量的 co 同时运行仅花费 2.8 GB 物理内存(运行 tcmalloc,每个co有120B的copy-stack大小配置)。

    它也有非常详细的文档。

    PS:

    它遵循 Apache 许可证,版本 2.0。

    【讨论】:

      【解决方案6】:

      如果 Boost 看起来很重,有帮助的人已经将 Boost (fcontext) 的相关部分提取为独立库,例如deboost.context.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-07
        • 1970-01-01
        • 2010-10-02
        相关资源
        最近更新 更多