协程近些年也比较火,了解了其机制后,越发觉得它确实是个好东西,平时用 C 比较多,于是想着动手弄一个 C 语言的协程。看了一些资料和项目之后,发现网上也不乏很多 C 实现的协程项目。看下来,每个项目都有各自适合的应用场景,比如 Protothreads 这类的蝇量级协程就更适合用于在嵌入式场景,带来的时空开销很小;还有一些轻量级项目,并不提供完善的功能,但是寥寥数百行代码就能把协程的机制交代清楚,很适用于学习;再往上看,一些大一点的项目可能就涉及到一些依赖......
总而言之,这些 C 协程项目多少存在改进空间,也都有各自发挥的舞台,这时我对自己这个项目的构想是:
这里并不是要搞标新立异立异,或者要在 C 协程上一统江湖。相信其他写过开源项目的朋友也能理解,写一个开源小项目很多时候不是为了物质追求,如果有人能用、对人有用、别人能提意见或鼓励,那就是莫大的荣誉。
项目地址: https://github.com/piaodazhu/dyco-coroutine (觉得可以麻烦给个 star
1
kwh 2022-10-23 12:24:36 +08:00
听说 Java 通过 nio 解决协程网络 IO 的阻塞,楼主怎么解决的?
|
2
weeei 2022-10-23 12:50:22 +08:00
|
3
heiher 2022-10-23 12:58:03 +08:00 via Android 1
不错,不错~ 我之前用 C 语言做一些网络工具,事件循环的回调写的实在不爽了,也撸了个 C 的协程实现 ( https://github.com/heiher/hev-task-system ),平常自用小项目里玩玩。
|
4
wangritian 2022-10-23 13:03:55 +08:00
go doSomething()
|
5
liqimore 2022-10-23 14:18:25 +08:00 via iPhone
支持楼主,之前一直用 argobot ,楼主这个用起来简单好多,希望可以维护下去
|
6
duckduckgo 2022-10-23 14:32:09 +08:00 via Android
支持
|
7
tulongtou 2022-10-23 20:22:25 +08:00
v 友真是卧虎藏龙,到我这才 6 楼,一半都自己搞协程,对不起,我拖了 v 友后腿了
|
8
bfjm 2022-10-23 23:10:14 +08:00
大佬
|
9
piaodazhu OP @kwh 最主要的解决方式是在 IO 操作之前把描述符注册到调度器,以便进行统一监听。然后协程主动让出执行权。调度器会在监听到 IO 事件的时候唤醒对应的协程。用了 hook 以后,相当于给系统的 socket API 增加了上述的《注册-让出》行为。
|
11
piaodazhu OP 多谢大家的支持!项目也会一直维护,如果有使用中的问题欢迎提 issue ~
|
12
ggvm 2022-10-26 18:10:15 +08:00
so diao
|