nodejs não é multithread, mas single-threaded, o nodejs usa um modo assíncrono de thread único sem bloqueio. Por causa do mecanismo JavaScript, o node é single-threaded por padrão. método de "E/S" assíncrono e orientado a eventos para obter um ambiente de tempo de execução de thread único e alta simultaneidade.
O ambiente operacional deste artigo: sistema Windows 10, nodejs versão 12.19.0, computador Dell G3.
O nó é de thread único e usa o modo sem bloqueio assíncrono de thread único.
Por causa do mecanismo JavaScript, o node é de thread único por padrão e um aplicativo node.js não pode utilizar recursos de vários núcleos.
Node.js usa E/S assíncrona e orientada a eventos para implementar um ambiente de tempo de execução de thread único e alta simultaneidade. Threading único significa que apenas uma coisa pode ser feita ao mesmo tempo.
Nodejs implementa assíncrono e sem bloqueio:
No nodejs, apenas a execução de js é realmente de thread único e a E/S é obviamente de outros threads.
O thread de execução js é de thread único. Contanto que a E/S necessária seja passada para a libuv, ela retornará para fazer outras coisas imediatamente e, em seguida, a libuv retornará a chamada no horário especificado.
Em detalhes, nodejs primeiro o chama do código js em ligações de nó para o código C/C e, em seguida, encapsula algo chamado "objeto de solicitação" no código C/C e o passa para libuv. Alguns desses objetos de solicitação são semelhantes aos retornos de chamada de função que precisam ser executados. Basta executar o retorno de chamada para libuv e implementar o retorno de chamada após a execução.
Resumindo, o processo geral de E/S assíncrona é o seguinte.
1. Inicie uma chamada de E/S
O usuário chama o módulo principal do Node a partir do código Javascript e passa parâmetros e funções de retorno de chamada para o módulo principal
O módulo principal do Node encapsula os parâmetros passados e funções de retorno de chamada no objeto de solicitação.
Envie esse objeto de solicitação para o conjunto de threads de E/S para aguardar a execução;
A chamada assíncrona Javascript termina e o thread Javascript continua a executar operações subsequentes.
2. Execute o retorno de chamada
Após a conclusão da operação de E/S, a função de retorno de chamada previamente encapsulada no objeto de solicitação é recuperada e executada para atingir o objetivo do retorno de chamada Javascript. (Os detalhes do retorno de chamada aqui são explicados abaixo)
Pode-se ver aqui que sempre entendemos mal o thread único do Node.js.
Na verdade, thread único refere-se a um único thread no ambiente de tempo de execução Javascript, e o Node.js não tem a capacidade de criar novos threads ao executar Javascript. As operações finais reais ainda são realizadas no Libuv e em seu loop de eventos. É por isso que Javascript, uma linguagem de thread único, pode implementar operações assíncronas em Node.js. Os dois não entrarão em conflito.
Amplie seu conhecimento:
Visão geral do multithreading Node.js
Algumas pessoas podem dizer que embora o Node.js seja de thread único, ele pode usar eventos cíclicos (Event Loop) para implementar tarefas de execução simultâneas. Investigando sua essência, o NodeJs na verdade usa dois threads diferentes, um é o thread principal para processar eventos de loop e o outro são alguns threads auxiliares no pool de Worker. As principais funções e relacionamentos desses dois threads são os seguintes:
Aprendizagem recomendada: "tutorial em vídeo nodejs"
Acima estão os detalhes sobre se o nodejs é multithread. Para obter mais informações, preste atenção a outros artigos relacionados neste site!