Libuv là C library đa nền tảng cung cấp event loop, async I/O và thread pool cho Node.js.
Hai loại operations:
- OS-native async (không dùng thread pool): network I/O (TCP/UDP) — dùng epoll (Linux), kqueue (macOS), IOCP (Windows), cực efficient;
- Thread pool operations (dùng 4 threads mặc định vì OS không hỗ trợ async đầy đủ): file system I/O (fs.readFile), DNS lookup (dns.lookup — không phải dns.resolve), crypto operations (pbkdf2, scrypt, randomBytes)
Thread pool size: tăng bằng env var UV_THREADPOOL_SIZE=16 (max 1024) — quan trọng khi app làm nhiều file I/O hoặc crypto đồng thời, 4 threads mặc định tạo bottleneck.
Ví dụ vấn đề: app gọi 10 dns.lookup() đồng thời, 4 threads xử lý 4 cái, 6 cái còn lại queue — tăng UV_THREADPOOL_SIZE hoặc dùng dns.resolve() (network I/O, không dùng thread pool).
Libuv abstract sự khác biệt giữa OS — cùng Node.js code chạy trên Linux epoll và Windows IOCP mà không cần sửa.