加载中...

libuv 是一个用 C 语言编写的跨平台异步 I/O 库,最初为 Node.js 开发,用来统一封装 Linux 的 epoll、macOS 的 kqueue、Windows 的 IOCP 等不同操作系统的事件通知机制。
libuv 的核心是事件循环:网络 I/O 通过操作系统的非阻塞机制处理;而文件 I/O、DNS 解析、部分加密运算等无法真正异步化的操作,则交给内部线程池(默认 4 个线程)执行,完成后将回调投递回事件循环。Node.js 事件循环的 timers、poll、check(setImmediate)、close 等阶段正是由 libuv 驱动的。
除 Node.js 外,libuv 也被 Julia、Neovim、uWSGI 等众多项目用作异步 I/O 基础设施。
理解 libuv 是理解 Node.js 并发模型的关键:JavaScript 单线程只是表象,真正的 I/O 并发由 libuv 在底层完成,这也解释了为何 CPU 密集任务会阻塞 Node 而 I/O 密集任务不会。

登录 后参与讨论
暂无讨论,来发表第一条评论吧