无意中逛到 Node.js 依赖的 libuv 库的官网
libuv 封装了各个系统的网络 I/O、文件I/O,DNS 相关的函数等,然后提供了 异步事件循环 的机制,在想是不是可以作为一个研究操作系统异步I/O的切入点,直接关注 I/O 的设计实现,想必要比卷 EventLoop 面试题要有意思得多。
从 Node.js 的角度,libuv 提供了一个在不同操作系统与 JavaScript 环境之间通信等接口,在其上是 V8 引擎、openssl、zlib 之类的模块,从而实现在 JavaScript 与各操作系统内核的直接交互。
整体架构:
简单过了一遍官方的指南,libuv封装了这几块的环境与接口:
- 非阻塞IO,EventLoop
- 线程池实现的文件系统操作
- 网络:BSD TCP / UDP socket、DNS、网络相关接口封装
- 线程管理 API
- 进程操作、信号、进程间通信
- 各类工具等等...
类似的库还有 Rust 语言社区的 Tokio。