c语言实现的 跨平台异步事件库
- libuv 采用了 异步 (asynchronous), 事件驱动 (event-driven)的编程风格
- 为开人员提供了一套事件循环和基于I/O(或其他活动)通知的回调函数
- libuv 提供了一套核心的工具集, 例如定时器, 非阻塞网络编程的支持, 异步访问文件系统, 子进程以及其他功能.
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/
每个方框都是一个独立的事件
- 都遵循先进先出的队列
uv_run
https://github.com/libuv/libuv/blob/v1.x/src/unix/core.c
uv_run 里面有 while循环,里面会依次运行
- uv__update_time(loop)
- uv__run_timers(loop);
- uv__run_pending(loop);
- uv__run_idle(loop);
- uv__run_prepare(loop);
- uv__io_poll(loop, timeout);
- uv__metrics_update_idle_time(loop);
- uv__run_check(loop);
- uv__run_closing_handles(loop);
以上事件串联起来,就组成了 EventLoop