Управление EventLoop в Node.js
Не так давно наткнулся на несколько публиций по поводу того, как работают setTimeout и setImmediate и не смог пройти мимо, поскольку очень часто про это спрашивают на собесах.
Так как я уже писал про промисы и setTImeout здесь. То давайте сразу перейдем к setImmediate, nextTick и queueMicrotask.
SetImmediate Во-первых - это не часть стандарта HTML5 и кроме как в node.js нигде не описан, хотя и присутствует на MDN. Во-вторых - setImmediate планирует выполнение функции после I/O событий. А сам колбек будет вызван следующей прокруткой механизма EventLoop.
process.nextTick теперь депрекейтед, и на его место пришел queueMicrotask.
В документации написано: The process.nextTick() queue is always processed before the microtask queue within each turn of the Node.js event loop. Что в переводе Очередь process.nextTick() всегда обрабатывается до очереди микрозадач в каждом повороте цикла событий Node.js. Т.е. получается, что в приведенном примере: `import { readFile } from 'node:fs'; import { setImmediate } from 'node:timers';
console.log('before I/O'); readFile('./package.json', () => { console.log('I/O done'); });
setImmediate(() => { console.log('SetImmediate.'); });
queueMicrotask(() => { console.log('QueueMicrotask'); });
не детерминированного поведения не будет и всегда в консоли получим именно такой вывод: `Before I/O -> queueMicrotask -> setImmediate -> I/O done
Итог: не надо сравнивать setTimeout и setImmediate т.к. это будет сравнение теплого с мягким ведь каждый из них решает задачи в своей области.
#nodejs@haradkou_sdet #js #javascript @haradkou_sdet``