Асинхронный механизм узла основан на «событиях». Все запросы ввода-вывода, сетевого взаимодействия и базы данных выполняются неблокирующим образом, а возвращаемые результаты обрабатываются циклом событий. Node будет обрабатывать только одно событие одновременно и сразу же войдет в цикл обработки событий для проверки последующих событий после завершения. Таким образом, ЦП и память могут сосредоточиться на обработке одной задачи одновременно, одновременно пытаясь обеспечить параллельное выполнение трудоемких операций ввода-вывода и других операций.
Операционная среда этого руководства: система Windows 7, nodejs версии 16, компьютер DELL G3.
NodeJS является однопоточным. Однопоточный подход имеет следующие преимущества:
простота и
высокая производительность, отсутствие частых затрат на переключение потоков и
небольшое использование ресурсов. Поскольку он является однопоточным, использование памяти по-прежнему очень низкое в условиях большой нагрузки
. -безопасно, без блокировки. Как решить проблемы с высоким уровнем параллелизма, такие как разблокировка и взаимоблокировка
?
Node использует асинхронный ввод-вывод и управление событиями (функцию обратного вызова) для решения проблемы высокого параллелизма.
Вообще говоря, решения с высоким уровнем параллелизма обеспечивают многопоточную модель, предоставляя поток для каждой бизнес-логики и компенсируя затраты времени на синхронные вызовы ввода-вывода за счет переключения системных потоков. Как и в Apache, на каждый запрос приходится один поток.
NodeJS использует однопоточную модель и использует асинхронные методы запроса для всех операций ввода-вывода, чтобы избежать частого переключения контекста. Он поддерживает очередь событий, когда программа NodeJS при выполнении входит в цикл обработки событий и ожидает прибытия следующего события. , каждый запрос асинхронного ввода-вывода будет помещен в очередь событий для выполнения после завершения.
Асинхронный механизм NodeJS основан на событиях. Все запросы ввода-вывода, сетевого взаимодействия и базы данных выполняются неблокирующим образом, а возвращаемые результаты обрабатываются циклом событий . Как показано на рисунке:
Процесс Node.js будет обрабатывать только одно событие за раз. После завершения он немедленно войдет в цикл событий для проверки последующих событий. Преимущество этого заключается в том, что ЦП и память могут сосредоточиться на обработке одной задачи одновременно, одновременно пытаясь обеспечить параллельное выполнение трудоемких операций ввода-вывода и других операций. Для атак с низкоскоростным соединением Node.js только добавляет запросы в очередь событий и ожидает ответа операционной системы. Таким образом, отсутствуют накладные расходы на многопоточность, что может значительно повысить надежность веб-приложений и предотвратить вредоносные атаки.
Механизм цикла событий.
Так называемый цикл событий означает, что NodeJS будет использовать механизм событий для выполнения всех асинхронных операций. Существует поток, который непрерывно зацикливается для обнаружения очереди событий.
Вся логика в NodeJS — это функция обратного вызова событий, поэтому NodeJS всегда находится в цикле событий, а запись программы — это функция обратного вызова первого события в цикле событий. Функция обратного вызова события может выдать запрос ввода-вывода или напрямую выдать событие и вернуться в цикл обработки событий после выполнения. Цикл событий проверяет очередь событий на наличие необработанных событий, пока программа не завершится. Цикл событий NodeJS невидим для разработчиков и реализован библиотекой libev. libev постоянно проверяет, есть ли активные прослушиватели событий, которые можно обнаружить, и не выходит из цикла событий до тех пор, пока не будут обнаружены прослушиватели событий и программа не завершится.