Sobes.tech
Middle

Como é implementada a programação de um único fio no Node.js?

sobes.tech IA

Resposta da IA

O Node.js é um ambiente de execução de thread único para executar código JavaScript graças ao mecanismo de Event Loop. Ele verifica continuamente a fila de eventos e executa os callbacks correspondentes.

Para realizar operações bloqueantes (entrada/saída, trabalho com ficheiros, rede), o Node.js utiliza um pool de threads (Thread Pool) da biblioteca libuv. Essas operações são executadas de forma assíncrona em threads separados, sem bloquear o thread principal do Event Loop. Os resultados ou erros são devolvidos ao Event Loop através de callbacks.

Componentes-chave:

  • Event Loop: Ciclo principal de execução que processa eventos e chamadas de funções.
  • Fila de callbacks: Fila para callbacks de operações assíncronas concluídas.
  • Pool de threads: Threads separados para realizar tarefas bloqueantes.
  • libuv: Biblioteca de baixo nível que fornece o Event Loop e o Thread Pool.
// Exemplo de operação assíncrona com ficheiro
const fs = require('fs');

fs.readFile('file.txt', 'utf8', (err, data) => {
  // Este callback será executado após a leitura do ficheiro terminar
  // em um thread separado do Thread Pool
  if (err) {
    console.error(err);
    return;
  }
  console.log(data);
});

console.log('Esta mensagem aparecerá primeiro, pois a leitura do ficheiro é assíncrona');

Assim, o Node.js garante alto desempenho para tarefas concorrentes graças à entrada/saída não bloqueante, apesar de ser de thread única na execução de JavaScript.