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

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

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

协程近些年也比较火,了解了其机制后,越发觉得它确实是个好东西,平时用 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
支持
DonaidTrump
    7
DonaidTrump  
   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     Solana     2988 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 25ms UTC 13:46 PVG 21:46 LAX 06:46 JFK 09:46
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86