O mecanismo assíncrono do nó é baseado em "eventos". Todas as E/S, comunicação de rede e consultas de banco de dados são executadas de maneira sem bloqueio e os resultados retornados são processados pelo loop de eventos. O nó processará apenas um evento por vez e entrará imediatamente no loop de eventos para verificar os eventos subsequentes após a conclusão. Dessa forma, a CPU e a memória podem se concentrar no processamento de uma coisa ao mesmo tempo, enquanto tentam permitir que E/S demoradas e outras operações sejam executadas em paralelo.
O ambiente operacional deste tutorial: sistema Windows 7, nodejs versão 16, computador DELL G3.
NodeJS é de thread único. O thread único tem os seguintes benefícios:
simples
e
de alto desempenho, evitando sobrecarga frequente de troca de thread e
pequeno uso de recursos.
-seguro, sem bloqueio, como resolver problemas de alta simultaneidade, como desbloqueio e impasse
?
O Node usa IO assíncrono e orientado a eventos (função de retorno de chamada) para resolver o problema de alta simultaneidade.
De modo geral, as soluções de alta simultaneidade fornecerão um modelo multithreading, fornecendo um thread para cada lógica de negócios e compensando a sobrecarga de tempo das chamadas de E/S síncronas por meio da comutação de threads do sistema. Assim como o Apache, há um thread por solicitação.
O NodeJS usa um modelo de thread único e usa métodos de solicitação assíncronos para todas as E/S para evitar trocas frequentes de contexto. Ele mantém uma fila de eventos quando o NodeJS é executado, o programa entra no loop de eventos durante a execução e aguarda a chegada do próximo evento; , cada solicitação de E/S assíncrona será enviada para a fila de eventos para execução após a conclusão.
O mecanismo assíncrono do NodeJS é baseado em eventos. Todas as E/S, comunicação de rede e consultas de banco de dados são executadas sem bloqueio e os resultados retornados são processados pelo loop de eventos . Como mostrado na imagem:
O processo Node.js processará apenas um evento por vez. Após a conclusão, ele entrará imediatamente no loop de eventos para verificar os eventos subsequentes. A vantagem disso é que a CPU e a memória podem se concentrar no processamento de uma coisa ao mesmo tempo, enquanto tentam permitir que E/S demoradas e outras operações sejam executadas em paralelo. Para ataques de conexão de baixa velocidade, o Node.js apenas adiciona solicitações à fila de eventos e aguarda a resposta do sistema operacional. Portanto, não há sobrecarga multithreading, o que pode melhorar significativamente a robustez das aplicações web e evitar ataques maliciosos.
Mecanismo de loop de eventos
O chamado loop de eventos significa que o NodeJS usará o mecanismo de eventos para resolver todas as operações assíncronas. Existe um thread que faz um loop contínuo para detectar a fila de eventos.
Toda lógica no NodeJS é uma função de retorno de chamada de evento, portanto, o NodeJS está sempre no loop de eventos e a entrada do programa é a função de retorno de chamada do primeiro evento no loop de eventos. A função de retorno de chamada de evento pode emitir uma solicitação de E/S ou emitir diretamente o evento e retornar ao loop de eventos após a execução. O loop de eventos verifica a fila de eventos em busca de eventos não tratados até o programa terminar. O loop de eventos do NodeJS é invisível para os desenvolvedores e é implementado pela biblioteca libev. O libev verifica constantemente se há ouvintes de eventos ativos que podem ser detectados e não sai do loop de eventos até que nenhum ouvinte de evento seja detectado e o programa termine.