Node.js › Event Loop & Non-blocking IO
What does it mean that Node.js's I/O is handled by libuv, and how does libuv abstract different operating systems' I/O mechanisms?
IntermediateAnswer
libuv is the C library underlying Node.js that provides a consistent, cross-platform API for asynchronous I/O, abstracting away the very different underlying mechanisms each OS provides for this (epoll on Linux, kqueue on macOS/BSD, IOCP on Windows) -- for operations these OS mechanisms can't handle asynchronously natively (like most file system operations on some platforms), libuv falls back to its own internal thread pool to simulate async behavior, presenting a single consistent interface to Node.js regardless of the underlying OS or specific I/O type.
// The exact same fs.readFile() call works identically across every OS,
// even though the underlying OS mechanism libuv uses differs completely
fs.readFile('file.txt', (err, data) => { /* ... */ });
// On Linux: may use epoll for network I/O, thread pool for file I/O
// On Windows: uses IOCP under the hoodReal-world example A cross-platform Node.js application's file-handling code works identically on a developer's Windows laptop and the Linux production servers without any platform-specific branching, entirely because libuv abstracts away the different underlying OS I/O mechanisms behind Node's consistent fs API.