Thread | Node.js
- Thread | Node.js
info
O Node executa o código em um único thread, mas pode lidar com operações assíncronas de forma eficiente usando um loop de eventos sem bloqueio.

Event Loop
O event loop é um mecanismo central em JavaScript e Node.js que gerencia a execução de código assíncrono, operações de I/O, e callbacks. Ele permite que a linguagem opere de forma não bloqueante, mesmo sendo single-threaded.
Como funciona o Event Loop em Node.js
- Thread Principal: O Node.js executa JavaScript em uma única thread (a "main thread").
- Fila de Eventos: Quando uma operação assíncrona é iniciada (como leitura de arquivos ou uma requisição HTTP), ela é delegada a uma API do sistema operacional ou ao pool de threads.
- Conclusão Assíncrona: Após a conclusão da operação assíncrona, a API coloca um callback (função de retorno) na fila de eventos.
- Looping: O event loop verifica constantemente se há callbacks na fila de eventos. Quando encontra um, o executa na thread principal.
Fases do Event Loop
- Timers: Executa callbacks de funções como
setTimeoutesetInterval. - I/O Callbacks: Processa callbacks de operações de I/O concluídas.
- Idle, Prepare: (usado internamente pelo Node.js).
- Poll: Recupera novos eventos de I/O.
- Check: Executa callbacks de
setImmediate. - Close Callbacks: Lida com callbacks relacionados ao fechamento de conexões (por exemplo,
socket.on('close')).
Threads
Enquanto o event loop opera em uma thread única, o Node.js também utiliza threads em segundo plano para tarefas específicas.
Tipos de Threads
-
Thread Principal: Onde o event loop e o código JavaScript do usuário são executados.
-
Thread Pool (libuv):
- O Node.js usa a biblioteca libuv para criar um pool de threads em segundo plano.
- Esse pool é usado para lidar com tarefas de I/O e CPU intensivas, como:
- Operações de sistema de arquivos.
- Resoluções de DNS.
- Criptografia (ex.: hashing e encriptação).
-
Worker Threads:
- Introduzido no Node.js 10.5.0, o módulo
worker_threadspermite que desenvolvedores criem threads explícitas para executar código JavaScript em paralelo. - É útil para processamento intensivo de CPU, como cálculos complexos ou manipulação de dados.
- Introduzido no Node.js 10.5.0, o módulo
Diferenças entre Event Loop e Threads
| Característica | Event Loop | Threads |
|---|---|---|
| Modelo de Execução | Single-threaded | Multi-threaded |
| Finalidade | Gerenciar operações assíncronas | Executar tarefas paralelas |
| Uso em Node.js | Sempre ativo | Opcional (pool de threads ou workers) |
| Tarefas Adequadas | I/O, timers, eventos | Processamento pesado (CPU-bound) |
Exemplo: Event Loop vs Threads
Event Loop:
setTimeout(() => {
console.log("Isso vem da fila de eventos.");
}, 1000);
console.log("Código síncrono executado primeiro.");
Saída:
Código síncrono executado primeiro.
Isso vem da fila de eventos.
Worker Threads:
const { Worker } = require('worker_threads');
const worker = new Worker(`
const { parentPort } = require('worker_threads');
let count = 0;
for (let i = 0; i < 1e9; i++) count++;
parentPort.postMessage(count);
`, { eval: true });
worker.on('message', result => {
console.log(`Resultado do cálculo: ${result}`);
});
console.log("Código principal continua enquanto o worker trabalha.");
Saída:
Código principal continua enquanto o worker trabalha.
Resultado do cálculo: 1000000000
Em resumo:
- O event loop é ideal para tarefas assíncronas leves e I/O.
- Threads (via
worker_threadsou thread pool) são mais adequadas para tarefas pesadas de CPU. Eles se complementam para maximizar o desempenho em Node.js.
Anotações pessoais
- Single Thread do node é por conta do event loop, o event loop é um orquestrador de eventos que delega para outras threads do libuv e o event loop que é single thread
- Nodejs é um controlador, ele pega o script (index.js) manda para v8 e a v8 interpreta ele e retorna
- Com a libuv a gente delega para o sistema operacional realizar os subprocessos (manipula os eventos)
- V8 traduz o JS para código de máquina
- Thread está do lado do C++