Что такое цикл событий и как это отличается, чем использование других моделей?

Я изучал Узел. JS и вся документация и блоги говорят о том, как это использует цикл событий, а не модель на запрос.

У меня есть некоторый беспорядок, понимая различие. Я чувствую, что я - 80%, там понимая это, но не полностью получение его все же.

10
задан cduruk 17 July 2010 в 16:24
поделиться

3 ответа

Многопоточная модель порождает новый поток для каждого запроса. Это означает, что вы получаете довольно много накладных расходов с точки зрения вычислений и памяти. Цикл событий выполняется в одном потоке, а это означает, что вы не получаете накладных расходов.

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

Псевдо-пример для блокировки ввода-вывода:

row = db_query('SELECT * FROM some_table');
print(row);

Псевдо-пример для неблокирующего ввода-вывода:

db_query('SELECT * FROM some_table', function (row) {
  print(row);
});

В этом примере используются лямбда-выражения (анонимные функции), как они постоянно используются в JavaScript. JS интенсивно использует события, и именно об этом говорят обратные вызовы. После завершения действия запускается событие, которое запускает обратный вызов. Вот почему ее часто называют событийной моделью или также асинхронной моделью .

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

Яркие примеры фреймворков очереди событий включают:

17
ответ дан 3 December 2019 в 17:19
поделиться

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

Это точно то же самое, что делается в большинстве систем с графическим интерфейсом пользователя. Система не может знать, когда пользователь нажмет кнопку или совершит какое-либо взаимодействие. Но когда он это сделает, событие будет передано в цикл событий, который по сути представляет собой цикл, который проверяет наличие новых событий в очереди и обрабатывает их.

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

Короче говоря, все работает параллельно, кроме вашего кода. Никогда не будет двух фрагментов функций обратного вызова, работающих одновременно - цикл обработки событий представляет собой один поток. Однако процессы, которые выполняют данные извне и, наконец, распространяют события, могут быть распределены по нескольким потокам / процессам.

6
ответ дан 3 December 2019 в 17:19
поделиться

Выровненный цикл позволяет вам обрабатывать время, необходимое для разговора с жестким диском или сетью. возьмите этот список времени:

Source | CPU Cycles
L1     | 3 Cycles
L2     | 14 Cycles
RAM    | 250  Cycles
Disk   | 41,000,000 Cycles
Network| 240,000,000 Cycles

Когда вы запускаете curl в PHP, вы просто тратите ресурсы процессора.

0
ответ дан 3 December 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: