Поточная модель будет создавать новую нить для каждого запроса. Это означает, что вы получаете некоторые накладные расходы с точки зрения вычислений и памяти. Цикл обработки событий выполняется в одном потоке, что означает, что вы не получаете накладных расходов.
В результате вы должны изменить свою модель программирования. Поскольку все эти разные вещи происходят в одном потоке, вы не можете блокировать. Это означает, что вы не можете ждать, пока что-то произойдет, потому что это заблокирует весь поток. Вместо этого вы определяете обратный вызов, который вызывается после завершения действия. Обычно это называется неблокирующим вводом / выводом .
Псевдо пример блокировки ввода / вывода:
row = db_query('SELECT * FROM some_table');
print(row);
Псевдо-пример для неблокирующего ввода / вывода:
db_query('SELECT * FROM some_table', function (row) {
print(row);
});
В этом примере используются лямбда-выражения (анонимные функции), как будто они используются в JavaScript все время. JS интенсивно использует события, и это именно то, о чем говорят обратные вызовы. Как только действие завершено, запускается событие, которое запускает обратный вызов. Вот почему его часто называют четная модель или также асинхронная модель .
Реализация этой модели использует цикл, который обрабатывает и запускает эти события. Вот почему она называется очередь событий или цикл событий .
Известные примеры каркасов очереди событий: