Se eu entendi corretamente, o Nó JS não está bloqueando ... então, em vez de esperar por uma resposta de um banco de dados ou outro processo, ele passou para outra coisa e verifica novamente mais tarde.
Também é de rosca única.
Tudo isso significa que um determinado processo Node JS pode utilizar de maneira completa e eficiente um único núcleo da CPU, mas não usará nenhum outro núcleo na máquina, pois nunca usará mais de um por vez.
Isso obviamente significa que as outras CPUs ainda podem ser usadas por outros processos para coisas como banco de dados SQL ou outras sub-rotinas pesadas de CPU separadas intencionalmente, desde que sejam um processo separado.
Também no caso em que o processo Node JS possui um loop sem fim ou função de execução longa, esse processo não é mais útil até que o loop sem fim ou a função de execução longa seja interrompido (ou todo o processo seja eliminado).
Está tudo certo? Estou correto no meu entendimento?
fonte
Respostas:
Praticamente correto, sim. O servidor node.js possui um conjunto de encadeamentos internos para poder executar operações de bloqueio e notificar o encadeamento principal com um retorno de chamada ou evento quando as coisas terminarem.
Portanto, imagino que ele fará uso limitado de outro núcleo para o pool de threads, por exemplo, se você fizer uma leitura do sistema de arquivos sem bloqueio, isso provavelmente será implementado, informando um thread do pool de threads para executar uma leitura e definir um retorno de chamada quando isso é feito, o que significa que a leitura pode estar acontecendo em um thread / core diferente enquanto o programa node.js principal está fazendo outra coisa.
Mas, do ponto de vista do node.js., ele é totalmente único e não usa diretamente mais de um núcleo.
fonte
Sim, eu diria que sua compreensão está totalmente correta. Este artigo ( arquivado ) explica muito bem a lógica por trás desse design. Este é provavelmente o parágrafo mais importante:
fonte
Mesmo se esse fosse um tópico antigo, pensei, que eu compartilharia com uma ideia de como utilizar mais de um núcleo no aplicativo Node.JS. Como Nuray Altin mencionou - o JXcore pode fazer isso.
Exemplo simples:
Por padrão, existem dois threads (você pode alterá-lo com
jxcore.tasks.setThreadCount()
)Claro que há muito mais que você pode fazer com tarefas. Os documentos estão aqui .
Poucos artigos sobre esse assunto:
fonte
Desde que esta pergunta fez quase 2 anos atrás. As coisas estão ficando diferentes ou existem abordagens alternativas para o problema de multithreading no Node.JS
De acordo com a publicação abaixo, usando a extensão de 'tarefa' recebida, alguns podem se beneficiar diretamente de outros núcleos disponíveis.
http://oguzbastemur.blogspot.com/2013/12/multithread-nodejs.html
fonte
O Node.js é um aplicativo de thread único, mas pode oferecer suporte à simultaneidade por meio do conceito de evento e retornos de chamada. Aqui está o vídeo de Philip Roberts, que explica como os loops de eventos funcionam em javascript.
Clique aqui para ver o vídeo
(Em vez de WebAPIs, existem APIs C ++ no Node.js)
fonte