Когда (точно и определенно) запускаются process.nextTick() кэлбэки?
Вот выдержка из документации:
process.nextTick()is not technically part of the event loop. Instead, the nextTickQueue will be processed after the current operation is completed, regardless of the current phase of the event loop. Here, (1) an operation is defined as a transition from the underlying C/C++ handler, and handling the JavaScript that needs to be executed.
Вот из node js блога:
In v0.10, (2) nextTick handlers are run right after each call from C++ into JavaScript. That means that, (3) if your JavaScript code calls process.nextTick, then the callback will fire as soon as the code runs to completion, but before going back to the event loop.
Мне кажется, утверждения (2) и (3) располагаются в противоречии друг к другу: первое из них говорит о том, что nextTick кэлбэки запускаются сразу же после того, как мы оказались на JS стороне (то есть, как я понимаю, когда event loop запустил некий наш (I/O или таймер) кэлбэк), а второе - что они должны быть запущены перед выходом из JS кода. Это две большие разницы!
Что касается предложения (1), то при желании его можно истолковать и так и сяк. "Операция" определяется как переход (transition) на JS сторону или как переход и выполнение (handling) JS кода?
Давайте начнем с того, что здесь понимается под словами "C/C++ handler"? Это наш, пользовательский кэлбэк, написанный на JS и откомпилированный в плюсы, или это какая-то внутренняя Node-сущность, которую вызывает event loop и которая в свою очередь должна вызвать пользовательский JS кэлбэк? (То есть что есть этот самый "transition"?)
Словом, буду благодарен за пояснения.