Você deve já ter lido sobre event loop, que o Node.js é assíncrono, orientado a eventos etc.
Modo Síncrono
No modo síncrono, deve se esperar o termino de execuação de uma linha para seguir para a proxima.
const fs = require("fs")
const input = fs.readFileSync("input.txt", "utf-8")
console.log(input)
O modo síncrono também é conhecido como "blocking code".
Ou seja, cada linha espera o resultado da linha anterior para pode seguir o fluxo.
Perceba que o resultado na tela saiu na ordem esperada.
Modo Assíncrono
Essa operação de IO demora um pouco para finalizar, então como é assíncrono, ele vai rodar e vai passar reto enquanto os dados não estiverem prontos e não pararem nela como no sync.js. Quando ele bater na linha ReadFile ele vai passar todas as camadas do SO pedindo para fazer esse IO e, internamente, vai gerenciar avisando quando estiver pronto para leitura ou dado um erro, vai ser chamado o callback.
No modo assíncrono, não espera o termino de execução de uma linha para ir para proxíma
const fs = require("fs")
fs.readFile("input.txt", "utf-8", (err, data) => {
console.log(data)
})
console.log("Non-blocking Code")
console.log("Lendo o arquivo...")
Ele lê o arquivo em background e vai seguir o fluxo, enquanto os dados do background não estiverem prontos.
Quando estiver pronto para leitura ou dado um erro, vai ser chamado o callback.
Perceba que as duas linhas do console.log() foram lidas primeiro do que o arquivo.txt que continha a mensagem hello world!
O que é thread?
Imagine que a thread é uma caixa com uma sequência de instruções.
O node usa apenas UMA thread para executar os codigos, ou seja, toda as requisições usam a mesma thread.
O que é Event Loop?
O event-loop é o responsável por escutar e emitir eventos no sistema.
No Node se trabalha com eventos de I/O(Input/Output).
Eventos de I/O(Input/Output) podem ser: ler e escrever arquivos locais ou fazer uma requisição http para uma API.
O event-loop vai pegar os eventos e executar os callbacks, mas sem bloquear o fluxo.
Fico por aqui, até breve!
Top comments (0)