I/O bloqueante para a thread chamadora até a operação terminar; I/O não bloqueante retorna imediatamente e deixa a thread fazer outro trabalho enquanto a operação se completa. Sync vs async descreve a mesma ideia no nível da API.
I/O bloqueante para a thread chamadora até a operação terminar; I/O não bloqueante retorna imediatamente e deixa a thread fazer outro trabalho enquanto a operação se completa. Sync vs async descreve a mesma ideia no nível da API.
read() até os dados chegarem. Simples, mas a thread fica ociosa o tempo todo — para atender N clientes lentos você precisa de N threads.Blocking: ──[ wait for disk ]── (thread stuck, does nothing)
Non-blocking: ──▶ returns now; event loop notified when ready
// Blocking: nothing else runs until the file is read
const data = fs.readFileSync('big.txt');
// Non-blocking: thread keeps going; callback fires later
fs.readFile('big.txt', (err, data) => { /* handle later */ });
// or async/await on top of non-blocking primitives
const data2 = await fs.promises.readFile('big.txt');
Este é o cerne dos servidores escaláveis. Node.js e nginx lidam com contagens enormes de conexões em poucas threads justamente porque o I/O é não bloqueante — a espera não prende uma thread. Use chamadas bloqueantes pela simplicidade em scripts; use não bloqueantes para serviços de rede de alta concorrência, e nunca bloqueie o event loop com trabalho pesado de CPU.
Uma biblioteca de perguntas de entrevista de TI com respostas detalhadas — de Júnior a Sênior.
Doar