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操作协程化

lib-zo,C语言另一个协程库,慢操作协程化

lib-zo,C语言另一个协程库,协程锁,协程条件,协程信号

lib-zo,C语言另一个协程库,socket操作协程化

lib-zo,C语言另一个协程库,sleep协程化,睡眠

lib-zo,C语言另一个协程库,dns协程化, gethostbyname

你可能感兴趣的:(lib-zc,C/C++,开发语言,c语言)