DEV Community

Genesis
Genesis

Posted on • Edited on

Introdução ao Node.js - Parte 2

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)
Enter fullscreen mode Exit fullscreen mode

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.

Image description
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...")
Enter fullscreen mode Exit fullscreen mode

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.

Image description
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)