Node.js uses libuv to talk to the operating system without blocking the JavaScript thread. It also runs some work (files, crypto, DNS lookup) in its thread pool.