V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
piaodazhu
V2EX  ›  程序员

摸鱼开发纯 C 协程框架的后续和心得

  •  1
     
  •   piaodazhu ·
    piaodazhu · 2022-11-13 16:56:25 +08:00 · 2092 次点击
    这是一个创建于 771 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这学期对协程有点兴趣,于是在摸鱼期间搞了一个纯 C 协程框架的项目。初版完成以后,发了这篇帖子:尝试搞了一个纯 C 的协程框架。帖子发出来以后,项目陆陆续续有了 50 个 star ,实在是非常感谢 V 友们的支持,让我小小的心灵受到了巨大的鼓舞。迄今为止,自我感觉已经将这个项目做到了当初期望的程度,后面摸鱼的重心可能转移到别处。在这里分享一下其间的工作和心得。

    初版主要关注协程框架的核心功能,即调度器和协程配套的 API 。后续的版本主要的功能更新有:协程池、非对称协程、2-优先级调度和性能测试。协程池可以避免频繁申请和回收内存,也可以用来控制任务数量上限(这个效果也可以用初版中的 waitgroup 达成)。非对称协程个人认为是一种偏“麻烦”的协程编程方式,也就是手动yield()resume()。本帖这个项目还是鼓励用默认的对称协程的方式,让调度器自动去做调度,代码会更加清晰。2-优先级调度支持优先调度某些协程。比如在 TCP server 中,为 accept 协程设置更高优先级,可以在相同的 backlog 参数的情况下承载更多的连接。性能测试主要测了网络并发和切换效率,对比方案有 IO 多路复用、pthread 多线程和腾讯的 libco 。最终的测试结果体现出该框架的性能还是相当可观的。

    这段时间的开发还是很有收获的。其一是造轮子带来的天然的成就感。有时候这种造轮子并没有意义,但是个人认为这个轮子并不比已有的差,造出来真有实际意义。其二是一段时间的折腾后,对协程有了一定的认知。一开始觉得协程是个高级而神秘的东西,现在越发觉得核心的就那么一点东西,颇有一种“把厚书读薄”的通透感。其三是丰富了 coding 和 debug 的经验。项目代码量虽然不大,但是要把代码写得能够自我解释、把框架调顺还是不那么容易的,这么看来也确实收获了经验。

    最后还是希望能有更多的朋友来看一看,用一用,提提意见。也欢迎来贡献代码。如果觉得项目有帮助,也欢迎推荐给其他人。代码已经产出了,多一个曝光,就多产生一份价值,hhhh 。

    项目地址: https://github.com/piaodazhu/dyco-coroutine (再次求 star ~

    3 条回复    2022-11-13 22:59:43 +08:00
    johnman
        1
    johnman  
       2022-11-13 16:58:36 +08:00
    点赞
    codehz
        2
    codehz  
       2022-11-13 18:16:44 +08:00   ❤️ 1
    代码里看到了好多双下划线的标识符,但是这在标准里属于保留字,用户代码不应该使用——主要是编译器没准就给你占用了
    piaodazhu
        3
    piaodazhu  
    OP
       2022-11-13 22:59:43 +08:00
    @codehz 多谢提醒~已经全部修改了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1063 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:32 · PVG 03:32 · LAX 11:32 · JFK 14:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.