V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
piaodazhu
V2EX  ›  程序员

尝试搞了一个纯 C 的协程框架

  •  1
     
  •   piaodazhu ·
    piaodazhu · 2022-10-23 10:20:47 +08:00 · 2867 次点击
    这是一个创建于 609 天前的主题,其中的信息可能已经有所发展或是发生改变。

    协程近些年也比较火,了解了其机制后,越发觉得它确实是个好东西,平时用 C 比较多,于是想着动手弄一个 C 语言的协程。看了一些资料和项目之后,发现网上也不乏很多 C 实现的协程项目。看下来,每个项目都有各自适合的应用场景,比如 Protothreads 这类的蝇量级协程就更适合用于在嵌入式场景,带来的时空开销很小;还有一些轻量级项目,并不提供完善的功能,但是寥寥数百行代码就能把协程的机制交代清楚,很适用于学习;再往上看,一些大一点的项目可能就涉及到一些依赖......

    总而言之,这些 C 协程项目多少存在改进空间,也都有各自发挥的舞台,这时我对自己这个项目的构想是:

    1. 可读性。代码可读性尽量高,易于维护,多年以后不写注释也能一眼看懂
    2. 实用性。功能尽可能完善,能支持一般场景,性能尽可能高
    3. 易用性。看示例就可以直接上手,示例应该清晰明了

    这里并不是要搞标新立异立异,或者要在 C 协程上一统江湖。相信其他写过开源项目的朋友也能理解,写一个开源小项目很多时候不是为了物质追求,如果有人能用、对人有用、别人能提意见或鼓励,那就是莫大的荣誉。

    项目地址: https://github.com/piaodazhu/dyco-coroutine (觉得可以麻烦给个 star

    12 条回复    2022-10-26 18:10:15 +08:00
    kwh
        1
    kwh  
       2022-10-23 12:24:36 +08:00
    听说 Java 通过 nio 解决协程网络 IO 的阻塞,楼主怎么解决的?
    weeei
        2
    weeei  
       2022-10-23 12:50:22 +08:00
    heiher
        3
    heiher  
       2022-10-23 12:58:03 +08:00 via Android   ❤️ 1
    不错,不错~ 我之前用 C 语言做一些网络工具,事件循环的回调写的实在不爽了,也撸了个 C 的协程实现 ( https://github.com/heiher/hev-task-system ),平常自用小项目里玩玩。
    wangritian
        4
    wangritian  
       2022-10-23 13:03:55 +08:00
    go doSomething()
    liqimore
        5
    liqimore  
       2022-10-23 14:18:25 +08:00 via iPhone
    支持楼主,之前一直用 argobot ,楼主这个用起来简单好多,希望可以维护下去
    duckduckgo
        6
    duckduckgo  
       2022-10-23 14:32:09 +08:00 via Android
    支持
    tulongtou
        7
    tulongtou  
       2022-10-23 20:22:25 +08:00
    v 友真是卧虎藏龙,到我这才 6 楼,一半都自己搞协程,对不起,我拖了 v 友后腿了
    bfjm
        8
    bfjm  
       2022-10-23 23:10:14 +08:00
    大佬
    piaodazhu
        9
    piaodazhu  
    OP
       2022-10-24 08:48:50 +08:00
    @kwh 最主要的解决方式是在 IO 操作之前把描述符注册到调度器,以便进行统一监听。然后协程主动让出执行权。调度器会在监听到 IO 事件的时候唤醒对应的协程。用了 hook 以后,相当于给系统的 socket API 增加了上述的《注册-让出》行为。
    piaodazhu
        10
    piaodazhu  
    OP
       2022-10-24 09:02:57 +08:00
    @heiher 这个项目好强,而且支持这么多平台,赶紧 star 了~
    piaodazhu
        11
    piaodazhu  
    OP
       2022-10-24 09:06:57 +08:00
    多谢大家的支持!项目也会一直维护,如果有使用中的问题欢迎提 issue ~
    ggvm
        12
    ggvm  
       2022-10-26 18:10:15 +08:00
    so diao
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1280 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:49 · PVG 07:49 · LAX 16:49 · JFK 19:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.