Это потому, что таймеры на nodejs не являются точными в том смысле, что они являются просто событиями в цикле событий, и поэтому они не могут точно знать, когда они будут запущены, поэтому setTimeout говорит, что он будет выполнен по крайней мере послевремя, которое вы указали.
Заданный интервал ожидания не может рассчитывать на выполнение после этого точного количества миллисекунд.Это связано с тем, что другой исполняемый код, который блокирует или удерживает цикл событий, отодвигает выполнение тайм-аута назад.Единственная гарантия состоит в том, что время ожидания не будет выполнено раньше, чем объявленный интервал времени ожидания.
Когда вы устанавливаете setInmediate, вы заполняете цикл событий множеством промежуточных событий, поэтому вы нажимаететайм-ауты возвращаются в очередь.
Имейте в виду, что циклы цикла событий не имеют одинаковой (точной) длительности во времени, поэтому даже если вы считаете, что setInmediate не должен влиять на таймеры, вы расширяете событиепродолжительность циклов во времени.
Интересные статьи:
https://nodejs.org/en/docs/guides/timers-in-node/
https://medium.com/the-node-js-collection/what-you-should-know-to-really-understand-the-node-js-event-loop-and-its-metrics-c4907b19da4c
Редактировать: как вы указали, в вашем случае этонапротив, есть больше итераций при использовании setInmediate.В этом случае это может быть связано с динамической скоростью цикла обработки событий в зависимости от загрузки программы.