lib-zo,C语言另一个协程库,整理
lib-zo
一个 C 协程库, 项目地址 https://github.com/mailhonor/lib-zo
API文档 https://github.com/mailhonor/lib-zc/blob/master/doc/coroutine.md
感谢
本协程库的实现参考了 libco, libgo, nodejs 的实现
介绍
- 支持文件IO操作协程化(如 mkdir, getdents 等)
- 支持协程条件, 协程锁
- 慢操作协程化
- 支持 sleep
- 可以禁用/启用给定的 fd 协程化
- 可以禁用 UDP 协程切换
- 部分支持 dns 协议
- 支持静态编译
睡眠
- 支持 sleep
- 不支持 usleep 和 nanosleep
- 毫秒睡眠请用 void zcoroutine_sleep_millisecond(int milliseconds);
支持的文件io
可开启支持文件 IO 在其他线程池工作, 这些IO函数包括:
- open, openat, close, read, readv, write, writev, lseek,
- fdatasync, fsync, rename, truncate, ftruncate,
- rmdir, mkdir, getdents,
- stat, fstat, lstat, link, symlink, readlink, unlink,
- chmod, fchmod, chown, fchown, lchown, utime, utimes,
支持慢(阻塞式)操作
- 慢操作可以在其他线程池工作
dns协议
本框架下, 大部分 glibc 版本的 DNS 解析会有 BUG, 但至少版本 2.12 没问题.
如果有问题, 建议:
- 如果需要查询常用域名的 IP 地址, 可以写到 hosts 文件
- 可以考虑 “慢操作协程化”
- 可以禁用 53 端口(既 DNS)的 UDP 协程切换
可以禁用 UDP 协程切换
- 可以禁用 UDP 协程切换,
- 可以禁用 53 端口(既 DNS)的 UDP 协程切换
源码目录
coroutine.c coroutine.h 是源码
*_test.c 是例子
编译
make
得到
libzc_coroutine.a
使用
gcc your_code.c ./libzc_coroutine.a
其他
lib-zo,C语言另一个协程库,激活文件IO操作协程化