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.