Рубрики
Без рубрики

Различия между асинхронными таймами асинхронных API JavaScript

Rajika Imal. Различия между асинхронными API JavaScript SZűCS László на Unsplashjavascript – это однопоточный язык, который использует асинхронные конструкции для одновременных задач. Интересно, что он обрабатывает параллельные задачи эффективно с другим подходом по сравнению с традиционными языками любит Java и C #. Событие Loopehereher

Автор оригинала: FreeCodeCamp Community Member.

Rajika Imal.

JavaScript – это однопоточный язык, который использует асинхронные конструкции для одновременных задач. Интересно, что он обрабатывает параллельные задачи эффективно с другим подходом по сравнению с традиционными языками любит Java и C #.

Контур событий

Будь то браузерная среда или Node.js, JavaScript асинхронно из-за того, что он использует контур событий. В среде узла он реализован с использованием библиотеки Libuv. Первоначально Libuv была разработана как обертка в Либев. В узле версии 0.9.0 зависимость Либев была удалена.

Фазы в петлях событий

   ┌───────────────────────────┐┌─>│           timers          ││  └─────────────┬─────────────┘│  ┌─────────────┴─────────────┐│  │     pending callbacks     ││  └─────────────┬─────────────┘│  ┌─────────────┴─────────────┐│  │       idle, prepare       ││  └─────────────┬─────────────┘      ┌───────────────┐│  ┌─────────────┴─────────────┐      │   incoming:   ││  │           poll            │<─────┤  connections, ││  └─────────────┬─────────────┘      │   data, etc.  ││  ┌─────────────┴─────────────┐      └───────────────┘│  │           check           ││  └─────────────┬─────────────┘│  ┌─────────────┴─────────────┐└──┤      close callbacks      │   └───────────────────────────┘

Курсы событий можно разделить на несколько этапов, как показано выше. Каждая фаза будет выполнена в каждой итерации. Одна такая итерация называется галочкой в контуре события. Каждый этап имеет первый в очереди первой очереди (FIFO), которые будут регистрировать разные задачи. Чтобы понять, как работает Settimeout, Setimmediate и NextTick, мы пройдемся по соответствующим важным фазам.

Таймеры фазы

Обратные вызовы, зарегистрированные совокупность а также Setinterval будет выполнен на этом этапе. Важно отметить, что обратные вызовы не будут выполнены немедленно, а скорее после определенного порога времени истечения срока действия.

Фаза проверки

Если фаза опроса, которая обрабатывает обратные вызовы ввода/вывода, становится простой или максимальное количество выполнений, которые превышают его, чтобы проверить фазу, где он выполняет обратные вызовы, зарегистрированные setimmediate Отказ

Очередная очередь Microtask и Macrotask

Эти две очереди важны для понимания порядка задач, выполненных через разные API. Макрозащиты выполняются в каждой из фаз, показанных на диаграмме выше.

setimmediate является частью очереди макротассы. MicroTasks будут выполнены до тех пор, пока очередь не будет пустым, прежде чем перейти к следующей итерации или галочке контура события.

Процесс. NextTick Crossbacks будет зарегистрирован в очереди MicroTask, и они будут выполнены, пока не будет пустым. Поэтому, имеющие рекурсивные звонки в процессе. NextTick может голодать петлю событий, предотвратить его перейти к следующему тику. Макрозащитные задачи не будут голодать петлю события, поскольку он будет двигаться на следующем тике после достижения максимального количества выполнений.

Давайте посмотрим на несколько примеров, чтобы увидеть, как каждый из API ведет себя в реальном мире, чтобы получить лучшее понимание.

В остальных примерах, показанных в этой статье, Node.js будет использоваться в качестве среды выполнения.

Setimeate VS Setimmediate

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

В этом примере они находятся в цикле ввода/вывода. setimmediate Обратный вызов будет выполнен каждый раз, когда Macrotask Queue (этап проверки) будет выполнен после тика. SettimeOut будет вызван в этапе таймеров после превышения порога.

setimmediate vs process.nexttick.

NextTick является частью очереди MicroTask, и он будет выполнен до того, как контур событий перемещается на следующую галочку. Следующий NextTick в следующем тике Setimmediate отключит свой обратный вызов в очереди макротасных данных на этапе проверки.

NextTick выполняет рекурсивную функцию, которая будет выполняться до тех пор, пока она не въезжает в базовое условие (если num> 5). Только после выполнения NextTick Setimmediate пожарит свой обратный вызов. Непрерывное рекурсивное поведение связано с NextTick, являющимся частью очереди MicroTask, которая не позволяет контуру событий перейти к следующему тику.

Setimmediate VS Settimeout VS Process.NextTick

Как ожидается, NextTictick вызывается первым, а затем Setimmediate и Settimeout. Важно отметить, что функции называются в цикле ввода/вывода. Если они не находятся в пределах вывода цикла ввода/вывода, будут отличаться и будут зависеть от выполнения процесса.

Модель параллелизма и контур событий JavaScript имеет модель параллелизма на основе «контура события». Эта модель совершенно отличается от моделей в других … developer.mozilla.org Структура событий Node.js, таймеры и процесс. NextTick () | Node.js Редактировать на GitHub Структура событий – это то, что позволяет node.js выполнять неблокирующие операции ввода/вывода – несмотря на то, что … nodejs.org Задачи, микрозаски, очереди и расписание Когда я сказал моим коллеге Мэтт-Тунт Я думал над написанием куска на магистральной очереди и исполнении в … jakearchibald.com.

Оригинал: “https://www.freecodecamp.org/news/the-differences-between-javascripts-asynchronous-api-timers-d916e0596716/”