Node.js: почему фазы ожидания и подготовки используются только внутри?

документация в node.js описывает так называемые этапы лежащего в его основе цикла обработки событий.
В нем также явно указывается, что этапы idle и prepare используется только внутри компании.

Поскольку цикл событий node.js является одним из libuv, само собой разумеется что эти фазы, вероятно, отображаются на ожидании и подготовить дескрипторы libuv.
Они помогут повысить детализацию при организации задач в программное обеспечение. В частности, это единственный способ запланировать что-либо между выполнением обратных вызовов ввода-вывода и фазой опроса.
В любом случае они не экспортируются из базовой среды.

По какой причине эти этапы были запрещены, фактически предоставляя пользователям, по-видимому, худший цикл событий, чем тот, который предлагает libuv?
Есть ли другой способ планировать задачи, как указано выше?


Примечание: это просто любопытство.
Раньше я работал и с libuv, и с nodejs, и я заметил это, поэтому я хочу знать, есть ли для этого техническая причина или... Ну, так это было задумано. и все, без особой причины.


person skypjack    schedule 24.08.2016    source источник


Ответы (2)


Я не думаю, что есть конкретная причина, чтобы «запрещать» их. Более того, они на самом деле не запрещены, их просто не разоблачают. Вы можете создать надстройку Node, которая позволит вам создавать холостые и подготовленные дескрипторы, и не будет никаких проблем. Есть некоторые вещи, о которых вы должны знать:

  • У дескрипторов простоя ужасное название: они не запускаются, когда цикл фактически простаивает. Они запускаются один раз за итерацию цикла после таймеров, и если какой-либо таймер простоя активен, цикл будет заблокирован для ввода-вывода на ноль секунд. Поэтому они могут быть опасны, потому что ЦП будет вращаться, если вы его не остановите.

  • Обратные вызовы, зарегистрированные с помощью process.nextTick, вызываются, когда пересекается граница C++ ‹-> JS (см. вызовы к MakeCallback), поэтому обратные вызовы ввода-вывода можно отложить и запустить немного позже. Если бы вы представили дескрипторы подготовки для JS, вы бы использовали MakeCallback в коде C++, поэтому некоторые из обратных вызовов process.nextTick также вызывались бы вместе с вашими обратными вызовами подготовки.

В качестве общего замечания: дескрипторы бездействия, проверки и подготовки были каким-то образом унаследованы от libev (который libuv использовал внутри). Проверку и подготовку можно использовать при встраивании libuv в другие библиотеки, а дескрипторы бездействия немного странные, как я упоминал выше. Кроме того, в наши дни libuv следует своим собственным путем, поэтому не все, что есть у libuv, в конечном итоге будет раскрыто в Node.

person saghul    schedule 24.08.2016

Можно было бы задать обратный вопрос "зачем вам фаза холостого хода, например, выставляться"? Вы можете просто использовать setImmediate().

Кроме того, почему вы хотите выполнять что-то между обратными вызовами ввода-вывода и фазой опроса, поскольку вы все равно явно не контролируете эти вещи?

person Vad    schedule 24.08.2016