Blocking operations run synchronously and hold the single JavaScript thread until they finish — nothing else can run in the meantime. Non-blocking operations start the work, return immediately, and deliver the result later via a callback, Promise, or event, so the thread stays free to do other things.
Why Node is single-threaded yet non-blocking
Your JavaScript runs on thread driven by the . I/O (files, network, DNS) is delegated to , which uses the OS async facilities and a small under the hood. While that work happens off-thread, the event loop keeps processing other callbacks. When the I/O completes, its callback is queued and run.
