Чем setImmediate отличается от setTimeout(fn, 0)

Какие именно фазы setImmediate и setTimeout проходят.

Не очень хорошо объяснено, через что именно проходят все фазы setImmediate и setTimeout, см. nodeJS guide в разделе «Обзор фаз» говорится, что фаза обратного вызова ввода-вывода отвечает за setImmediate, и снова в разделе опроса и проверки говорится, что фаза проверки отвечает за setImmediate. поэтому я немного смущен этим. IO/обратный вызов или проверка или оба.

Может кто-нибудь объяснить жизненный цикл setTimeout и setImmediate внутри цикла событий и как они выполняются.


person Atikur Rahman    schedule 23.04.2018    source источник
comment
Не очень хорошо объяснено, через что именно проходят все фазы setImmediate и setTimeout, см. nodeJS doc в разделе Обзор фаз говорится, что фаза обратного вызова ввода/вывода отвечает за setImmediate и снова в опросе и В разделе check говорится, что фаза check отвечает за setImmediate. поэтому я немного смущен этим. IO/обратный вызов или проверить или и то, и другое   -  person Atikur Rahman    schedule 24.04.2018


Ответы (1)


Обратные вызовы setTimeout выполняются на этапе таймеров, тогда как обратные вызовы setImmediate выполняются на этапе проверки.

Поскольку фаза таймеров предшествует фазе проверки, setTimeout(fn,0) будет выполняться перед обратным вызовом setImmediate.

Документы также упоминают об этом, ниже я цитирую фазу опроса в разделе обзора фаз, где они упомянули исключения.

опрос: получение новых событий ввода/вывода; выполнять обратные вызовы, связанные с вводом/выводом (почти все, за исключением закрытых обратных вызовов, тех, которые запланированы таймерами, и setImmediate()); node будет блокироваться здесь, когда это уместно.

person Sagar Chaudhary    schedule 31.07.2019