Блокирующие (blocking) операции выполняются синхронно и удерживают единственный поток JavaScript до завершения — в это время ничего другое выполниться не может. Неблокирующие (non-blocking) операции запускают работу, немедленно возвращают управление и доставляют результат позже через колбэк, Promise или событие, так что поток остаётся свободным для других дел.
Почему Node однопоточный, но при этом неблокирующий
Ваш JavaScript выполняется в потоке, управляемом (event loop). Ввод-вывод (файлы, сеть, DNS) делегируется в , который под капотом использует асинхронные средства ОС и небольшой (thread pool). Пока эта работа идёт вне потока, цикл событий продолжает обрабатывать другие колбэки. Когда ввод-вывод завершается, его колбэк ставится в очередь и выполняется.
