Читал описание про process.nextTick - хочу убедиться правильно ли я понял,
В сравнении возьмем пример работы event loop в браузере - в данный момент времени в нем существует очередь из 3х задач
event loop:
task 1(уже в процессе выполнения)
task 2
task 3
При срабатывании setTimeout(setTimeoutTask, 0); эта запись попадет в очередь задач event loop и получаем следующую очередь
task1(уже в процессе выполнения)
task2
task3
setTimeoutTask
А теперь сравним это с работой process.nextTick - в ноде существует очередь задач
nodeTask1(уже в процессе выполнения)
nodeTask2
nodeTask3
И тут срабатывает process.nextTick(nextTickTask); я правильно понимаю что сейчас эта задача перейдет на позицию в event loop следующую после текущей задачи находящейся в выполнении и поместится во 2ю позицию так:
nodeTask1(уже в процессе выполнения)
nextTickTask
nodeTask2
nodeTask3
Тут могут крыться нюансы: в браузере нет понятия очереди. Scheduler (планировщик) принимает решение о том какой код из отложенных будет выполняться. В зависимости от того как были отложены tas2, task3, новая setTimeoutTask может стать между task2 и task3. В общем твои размышления верны.
Хочу уточнить насчет очереди выполнения. Очередь выполнения задач - это следствие (а не та очередь, которая паттерн программирования) работы EventLoop. EventLoop - один цикл синхронно выполняет задачи (допустим триггернулся обработчик события изменения файла), и запускает в конце новый цикл, в котором триггернулся другой обработчик события http запроса. С точки зрения внешнего наблюдателя есть очередь выполнения обработчиков (сначала файла, потом http запроса).
Подводя итонг: process.nextTick запланирует выполнение обработчика в следующий проход EventLoop-а. Перефразируя: обработчик выполнился асинхронно, максимально скоро (но порядок обработчиков не гарантирован).
Что-то не могу тут понять, допустим в данный момент выполняется какая-то операция “О” и срабатывает событие содержащее process.nextTick - в этом случае интерпретатор дождется окончания ближайшей логической операции в “О” и сразу выполнит process.nextTick?