Introdução ao Node.js (Single-Thread, Event-Loop e mercado)

Este capítulo não tem por finalidade contar a história do Node.js, afinal de contas o site oficial e o guia de inicio rápido fazem isso muito bem. Serei prático e objetivo ao abordar somente os conceitos essenciais, logo indispensáveis a qualquer desenvolvedor aventureiro.

Livro

Este conteúdo representa um texto de amostra (primeira versão ainda em desenvolvimento) do Livro Node.js para iniciantes. Para acompanhar o desenvolvimento, acesse: https://github.com/fabiojaniolima/livros#livros

O que é Node.js

No guia oficial de começo rápido (Quick Start), temos basicamente a seguinte introdução:

O Node.js é um ambiente de tempo de execução JavaScript de código aberto e multiplataforma. É uma ferramenta popular para quase qualquer tipo de projeto!

O Node.js executa o motor JavaScript V8, o núcleo do Google Chrome, fora do navegador. Isso permite que o Node.js seja muito eficiente.

Para maiores detalhes a respeito, bem como para conhecer a história da plataforma, acesse: https://nodejs.dev/introduction-to-nodejs

Em outras palavras, o Node.js é um runtime JavaScript server-side, ou seja, uma solução que possibilita ao desenvolvedor executar aplicações escritas em JavaScript do lado do servidor, de forma simples, rápida e performática. Isso é possível basicamente graças ao motor V8 e a biblioteca libuv, solução open-source para a qual dedicaremos mais algumas linhas logo adiante.

Antes de continuar

Antes de podermos continuar, é muito importante que você tenha conhecimento e gaste ao menos alguns minutos explorando os links abaixo:

Funcionamento básico

Vejo iniciantes quebrando a cabeça, torrando até o ultimo neurônio para entender o ciclo de vida dos eventos dentro da plataforma Node.js, falando assim até parece ser algo complexo, não é mesmo? Calma, eu falei que parece, mas como todos sabem as aparências enganam. 😉

Não será necessário mais do que dois tópicos (Single-Thread e Event-Loop) para explicar o comportamento, a forma como essa plataforma manipula os eventos a serem processados.

Single-Thread

O Node.js é uma plataforma orientada a eventos que utiliza o conceito de thread única para gerenciar a pilha de eventos ou pilha de chamada (Call Stack), que por sinal adota o comportamento do tipo LIFO (última entrada, primeira saída). As operações de background no Node são gerenciadas por works que rodam em segundo plano, estes sim podem conter operações multi-thread.

E estes tais works, afinal de contas o que são? Os works são processos em background de I/O assíncrono não bloqueastes gerenciados pela libuv, uma biblioteca open source multiplataforma escrita em linguagem C, a qual utiliza um thread-pool para gerenciar operações paralelas.

Este comportamento de thread única para manipulação da Call Stack é o que garante tanta performance a essa plataforma conforme veremos mais adiante.

Não se preocupe, estudaremos este comportamento na prática ao longo desta obra, porém, caso neste momento queira aprofundar-se um pouco mais no conceito, acesse: https://nodejs.dev/the-nodejs-event-loop

Event-Loop

Tentarei abordar o Event-Loop da forma mais simples e objetiva possível, deixando de lado conceitos que para nossa realidade, ainda mais neste momento, não iriam agregar valor algum, podendo ainda tornar este tópico desnecessariamente complexo, tais como Micro Task Queue, Next Tick Queue, Timers Queue, Immediates Queue e outros.

Veja abaixo uma representação abstrata do Event-Loop, bem como seu funcionamento:

Continue lendo em: https://medium.com/@fabiojanio/introdução-ao-node-js-single-thread-event-loop-e-mercado-46edd82c1faf