0%
O modelo assíncrono

O modelo assíncrono

Event loop, promises e tudo o que trava um servidor Node.

10-15 min

O modelo assíncrono

Um endpoint que respondia em 30 milissegundos passa a responder em 4 segundos, mas apenas quando outro endpoint é acionado. Os dois não têm nenhum código em comum, nenhum banco de dados compartilhado, nenhum lock. Os traces de execução mostram um tempo de processamento normal na aplicação; o que explode é o tempo entre a chegada do pacote e o início do processamento. Nenhuma ferramenta de profiling clássica mostra o culpado, porque o culpado não está no caminho observado.

Esse cenário é a assinatura de um event loop bloqueado, e é o modo de falha mais frequente e mais desconcertante do Node. Uma única chamada síncrona custosa — uma leitura de arquivo com readFileSync, um JSON.parse em três megabytes, uma expressão regular catastrófica, um hash bcrypt com um fator de custo elevado — basta para deixar em espera todas as outras requisições do processo. Esta lição apresenta o modelo mental exato do que acontece e, em seguida, as ferramentas para medir e corrigir o problema.

Pilha, fila de mensagens, loop

O Node executa seu JavaScript em uma única pilha de chamadas. Quando a pilha esvazia, o event loop verifica o que está pronto e empilha a próxima unidade de trabalho. Esse loop não é uma fila única: ele percorre fases sucessivas, em ciclo, enquanto houver trabalho a fazer.

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!