SlideShare uma empresa Scribd logo
SHARKTOWER
A I - D R I V E N P R O J E C T M A N A G E M E N T
NodeJS Under the Hood
Concorrência e Multithreading
Apresentação
Raphael Ferreira
Engenheiro de Software - Sharktower
Cursando Engenharia de Software - UFG
Rhuan Karlus
DevOps Lead Core Team - Sharktower
Cursando Engenharia de Computação - UFG
O que é NodeJS
NodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and Multithreading
Seu Código
V8
Core Modules
C++ Bindings
libuv
http-parser, c-ares,
OpenSSL, zlib
Sistema Operacional
V8 e libuv
● Tradutor / JS Engine (Just in Time Compiler)
● Garbage Collection
● Não é responsável por file system, http requests,
console, DOM
V8
● Event-driven Asynchronous i/o Model
● Network i/o, File i/o, DNS …
● Timers
● Thread Pool (4)
● Event Loop
libuv
V8 executa seu código dentro do event
loop em apenas uma thread
Event Loop
Timers
Pending
Callbacks
Poll for I/O
Check
Close callbacks
Incoming:
connections,
data, etc
resource: https://nodejs.org/uk/docs/guides/event-loop-timers-and-nexttick/
setTimeout
setInterval
I/O
Magic
setImmediate
close
events
resource: Bert Belder talk
https://www.youtube.com/watch?v=PNa9OMajw9w
index.js
process#exit
resource: Bert Belder talk
https://www.youtube.com/watch?v=PNa9OMajw9w
callback
nextTick
callback
Promise
Resolve
Timer Heap
Sistema Operacional
Thread Pool
index.js
process#exit
index.js
process#exit
net.Server.listen()
index.js
process#exit
index.js
process#exit
index.js
process#exit
refs--
Async
● Como criar código assíncronno (de
verdade) em NodeJS?
○ Addons
○ Workers
○ Quando utilizar Workers e quando
utilizar Addons
● Coding time
Async
● Como criar código assíncronno (de
verdade) em NodeJS?
○ Addons
○ Workers
○ Quando utilizar Workers e quando
utilizar Addons
● Coding time
Async
Você pode criar um Addon, que faz
uso do threadpool disponibilizado pela
LibUV, ou você pode criar um Worker
(node -v 10+) que faça seu processamento
em paralelo, enquanto o Event Loop
continua desbloqueado para tratar qualquer
requisição que o servidor receba.
Addons
● Como criar código assíncronno (de
verdade) em NodeJS?
○ Addons
○ Workers
○ Quando utilizar Workers e quando
utilizar Addons
● Coding time
Async
> https://nodejs.org/api/addons.html#addons_c_addons
Um Addon é um objeto
compartilhado dinamicamente linkado que
pode ser escrito em C ou C++. A função
require() pode carregar um Addon como
um módulo NodeJS qualquer.
Ok, mas como
criar um
Addon?
Ok, mas como
criar um
Addon?
1. Crie um arquivo escrito em C ou C++
2. Instale o módulo node-gyp globalmente
3. Crie o arquivo binding.gyp que mapeia o diretório de
addons e como eles devem ser importados.
4. No terminal: node-gyp configure build
5. Dentro de algum código JS: const addonModule =
require("<build-folder-path>/Release/<addon-name>");
6. addonModule.function(params)
Workers
● Como criar código assíncronno (de
verdade) em NodeJS?
○ Addons
○ Workers
○ Quando utilizar Workers e quando
utilizar Addons
● Coding time
Async
https://nodejs.org/api/worker_threads.html#worker_threa
ds_worker_threads
Um Worker é uma thread que executa
código JS em paralelo. O módulo worker_threads foi
lançado na versão 10 com estabilidade experimental.
Um worker pode executar um arquivo
NodeJS ou uma Template String passada como
parâmetro. A thread principal e suas threads "filhas" se
comunicam através do objeto parentPort, enviando e
recebendo mensagens.
Mas NodeJS não
era single-
thread?
Então...
Quando utilizar Addons e
quando utilizar Workers?
● Como criar código assíncronno (de
verdade) em NodeJS?
○ Addons
○ Workers
○ Quando utilizar Workers e quando
utilizar Addons
● Coding time
Async
1. Você precisa (e pode) executar uma
tarefa em paralelo?
2. Seu projeto faz algum processamento
muito lento?
3. Sua equipe domina C/C++ ?
● Como criar código assíncronno (de
verdade) em NodeJS?
○ Addons
○ Workers
○ Quando utilizar Workers e quando
utilizar Addons
● Coding time
Async
Referência
● https://github.com/rhuankarlus/talks/
● Node.js C++ Addons
● Node.js Worker Threads
● Understanding Worker Threads in Node.js
● How to Use Node.js C++ Addons - A Step-by-Step Tutorial
● The Node.js Event Loop, Timers, and process.nextTick()
● Morning Keynote- Everything You Need to Know About Node.js
Event Loop - Bert Belder, IBM
THANKS!

Mais conteúdo relacionado

PDF
Novidades PHP 7.4 e 8.0!
PPTX
NodeJS - Tutorial de forma simples e pratica.
PPTX
Introdução ao Node.js - FATEC SP
PDF
Nodejs - A performance que eu sempre quis ter
PPTX
Introdução ao NodeJS
PDF
Node.JS - Workshop do básico ao avançado
PDF
Node js - Javascript Server Side
PDF
Node.js, Uma breve introdução
Novidades PHP 7.4 e 8.0!
NodeJS - Tutorial de forma simples e pratica.
Introdução ao Node.js - FATEC SP
Nodejs - A performance que eu sempre quis ter
Introdução ao NodeJS
Node.JS - Workshop do básico ao avançado
Node js - Javascript Server Side
Node.js, Uma breve introdução

Mais procurados (20)

KEY
Uma visão rápida sobre Nodejs
PDF
Node.js - #1 - Introdução - Rodrigo Branas
PPTX
O que é nodejs, cases e vantagens
ODP
Conhecendo o Nodejs
PPTX
Testes com javascript
PPT
Nodejs justdigital
PPTX
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
PDF
Laravel + Vue: Como começar
PDF
Compartilhando código com Kotlin multiplataforma - Rafael Toledo
PPTX
Node JS - Parte 1
PDF
Programação para Web II: NodeJS
PDF
#noOps?? Transcendendo o DevOps pelo caminho de tijolos (não muito) amarelos
PDF
Source-to-container no mundo real
PPT
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
PDF
ASP.NET Core com Linux, Docker e Azure
PPTX
TDC2016POA | Trilha .NET - O que esperar do C# 7
PPTX
TDC2016POA | Trilha .NET - Trazendo o poder dos containers ao mundo .NET
PPTX
Conhecendo o Novo REST Framework
PPTX
9 erros que desenvolvedores Node.js cometem
PPTX
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Uma visão rápida sobre Nodejs
Node.js - #1 - Introdução - Rodrigo Branas
O que é nodejs, cases e vantagens
Conhecendo o Nodejs
Testes com javascript
Nodejs justdigital
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Laravel + Vue: Como começar
Compartilhando código com Kotlin multiplataforma - Rafael Toledo
Node JS - Parte 1
Programação para Web II: NodeJS
#noOps?? Transcendendo o DevOps pelo caminho de tijolos (não muito) amarelos
Source-to-container no mundo real
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
ASP.NET Core com Linux, Docker e Azure
TDC2016POA | Trilha .NET - O que esperar do C# 7
TDC2016POA | Trilha .NET - Trazendo o poder dos containers ao mundo .NET
Conhecendo o Novo REST Framework
9 erros que desenvolvedores Node.js cometem
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Anúncio

Semelhante a NodeJS Under the Hood - Concurrency and Multithreading (20)

PDF
Funcionamento interno do node.js e boas práticas
PDF
Node.js no Pagar.me
PDF
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
PPTX
Node.js - Devo adotar na minha empresa?
PDF
Node.js e Express
PPTX
Node.js para desenvolvedores .NET
PPTX
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
PPTX
Introdução ao Nodejs
PDF
O bom, o mau, o vilão... e o node.js
PDF
PPT
PDF
IBM - Curso Node + Angular - Aula 01
PDF
Realtime com node.js e socket.io
PPTX
APRESENTAÇÃO ISAQUE E RAQUEL QUARTA- VICTOR.pptx
PPTX
GDG Conf Node JS sem segredos
PPTX
Node.js - Worksigma
PDF
Curso de Node JS Básico
PDF
Javascript por debaixo dos panos
ODP
GDG NodeJS Sem Segredos
PDF
Node.js for Noobs
Funcionamento interno do node.js e boas práticas
Node.js no Pagar.me
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
Node.js - Devo adotar na minha empresa?
Node.js e Express
Node.js para desenvolvedores .NET
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Introdução ao Nodejs
O bom, o mau, o vilão... e o node.js
IBM - Curso Node + Angular - Aula 01
Realtime com node.js e socket.io
APRESENTAÇÃO ISAQUE E RAQUEL QUARTA- VICTOR.pptx
GDG Conf Node JS sem segredos
Node.js - Worksigma
Curso de Node JS Básico
Javascript por debaixo dos panos
GDG NodeJS Sem Segredos
Node.js for Noobs
Anúncio

Último (7)

PDF
Evolução em código: algoritmos genéticos com PHP
DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
PPTX
Curso de Windows 11 resumido na prática.pptx
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
PDF
apresentacao introducao computacao ead.pdf
PPTX
Mapeamento de Objeto para Tabela Relacional
PDF
Dos requisitos ao código: como criar código rastreável em PHP
Evolução em código: algoritmos genéticos com PHP
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
Curso de Windows 11 resumido na prática.pptx
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
apresentacao introducao computacao ead.pdf
Mapeamento de Objeto para Tabela Relacional
Dos requisitos ao código: como criar código rastreável em PHP

NodeJS Under the Hood - Concurrency and Multithreading

  • 1. SHARKTOWER A I - D R I V E N P R O J E C T M A N A G E M E N T
  • 2. NodeJS Under the Hood Concorrência e Multithreading
  • 3. Apresentação Raphael Ferreira Engenheiro de Software - Sharktower Cursando Engenharia de Software - UFG Rhuan Karlus DevOps Lead Core Team - Sharktower Cursando Engenharia de Computação - UFG
  • 4. O que é NodeJS
  • 7. Seu Código V8 Core Modules C++ Bindings libuv http-parser, c-ares, OpenSSL, zlib Sistema Operacional
  • 9. ● Tradutor / JS Engine (Just in Time Compiler) ● Garbage Collection ● Não é responsável por file system, http requests, console, DOM V8
  • 10. ● Event-driven Asynchronous i/o Model ● Network i/o, File i/o, DNS … ● Timers ● Thread Pool (4) ● Event Loop libuv
  • 11. V8 executa seu código dentro do event loop em apenas uma thread
  • 12. Event Loop Timers Pending Callbacks Poll for I/O Check Close callbacks Incoming: connections, data, etc resource: https://nodejs.org/uk/docs/guides/event-loop-timers-and-nexttick/
  • 13. setTimeout setInterval I/O Magic setImmediate close events resource: Bert Belder talk https://www.youtube.com/watch?v=PNa9OMajw9w index.js process#exit
  • 14. resource: Bert Belder talk https://www.youtube.com/watch?v=PNa9OMajw9w callback nextTick callback Promise Resolve
  • 15. Timer Heap Sistema Operacional Thread Pool index.js process#exit
  • 20. Async
  • 21. ● Como criar código assíncronno (de verdade) em NodeJS? ○ Addons ○ Workers ○ Quando utilizar Workers e quando utilizar Addons ● Coding time Async
  • 22. ● Como criar código assíncronno (de verdade) em NodeJS? ○ Addons ○ Workers ○ Quando utilizar Workers e quando utilizar Addons ● Coding time Async Você pode criar um Addon, que faz uso do threadpool disponibilizado pela LibUV, ou você pode criar um Worker (node -v 10+) que faça seu processamento em paralelo, enquanto o Event Loop continua desbloqueado para tratar qualquer requisição que o servidor receba.
  • 24. ● Como criar código assíncronno (de verdade) em NodeJS? ○ Addons ○ Workers ○ Quando utilizar Workers e quando utilizar Addons ● Coding time Async > https://nodejs.org/api/addons.html#addons_c_addons Um Addon é um objeto compartilhado dinamicamente linkado que pode ser escrito em C ou C++. A função require() pode carregar um Addon como um módulo NodeJS qualquer.
  • 25. Ok, mas como criar um Addon?
  • 26. Ok, mas como criar um Addon? 1. Crie um arquivo escrito em C ou C++ 2. Instale o módulo node-gyp globalmente 3. Crie o arquivo binding.gyp que mapeia o diretório de addons e como eles devem ser importados. 4. No terminal: node-gyp configure build 5. Dentro de algum código JS: const addonModule = require("<build-folder-path>/Release/<addon-name>"); 6. addonModule.function(params)
  • 28. ● Como criar código assíncronno (de verdade) em NodeJS? ○ Addons ○ Workers ○ Quando utilizar Workers e quando utilizar Addons ● Coding time Async https://nodejs.org/api/worker_threads.html#worker_threa ds_worker_threads Um Worker é uma thread que executa código JS em paralelo. O módulo worker_threads foi lançado na versão 10 com estabilidade experimental. Um worker pode executar um arquivo NodeJS ou uma Template String passada como parâmetro. A thread principal e suas threads "filhas" se comunicam através do objeto parentPort, enviando e recebendo mensagens.
  • 29. Mas NodeJS não era single- thread?
  • 31. Quando utilizar Addons e quando utilizar Workers?
  • 32. ● Como criar código assíncronno (de verdade) em NodeJS? ○ Addons ○ Workers ○ Quando utilizar Workers e quando utilizar Addons ● Coding time Async 1. Você precisa (e pode) executar uma tarefa em paralelo? 2. Seu projeto faz algum processamento muito lento? 3. Sua equipe domina C/C++ ?
  • 33. ● Como criar código assíncronno (de verdade) em NodeJS? ○ Addons ○ Workers ○ Quando utilizar Workers e quando utilizar Addons ● Coding time Async
  • 34. Referência ● https://github.com/rhuankarlus/talks/ ● Node.js C++ Addons ● Node.js Worker Threads ● Understanding Worker Threads in Node.js ● How to Use Node.js C++ Addons - A Step-by-Step Tutorial ● The Node.js Event Loop, Timers, and process.nextTick() ● Morning Keynote- Everything You Need to Know About Node.js Event Loop - Bert Belder, IBM