c语言实现的 跨平台异步事件库

  • libuv 采用了 异步 (asynchronous), 事件驱动 (event-driven)的编程风格
  • 为开人员提供了一套事件循环和基于I/O(或其他活动)通知的回调函数
  • libuv 提供了一套核心的工具集, 例如定时器, 非阻塞网络编程的支持, 异步访问文件系统, 子进程以及其他功能.

github-T.png

libuv参考
https://zhuanlan.zhihu.com/p/141649128
https://blog.csdn.net/qq_35886593/article/details/88898194

nodejs EventLoop

http://nodejs.cn/learn/the-nodejs-event-loop
https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/
每个方框都是一个独立的事件

  • 都遵循先进先出的队列

image.png

uv_run

https://github.com/libuv/libuv/blob/v1.x/src/unix/core.c
uv_run 里面有 while循环,里面会依次运行

  1. uv__update_time(loop)
  2. uv__run_timers(loop);
  3. uv__run_pending(loop);
  4. uv__run_idle(loop);
  5. uv__run_prepare(loop);
  6. uv__io_poll(loop, timeout);
  7. uv__metrics_update_idle_time(loop);
  8. uv__run_check(loop);
  9. uv__run_closing_handles(loop);

以上事件串联起来,就组成了 EventLoop
image.png