SlideShare una empresa de Scribd logo
1 de 41
Descargar para leer sin conexión
Daniel Khan / @dkhan
Everything I thought I knew
about the Event Loop waswrong
NodeConf Argentina / Daniel Khan / 28-10-2017
Todo lo que pensé que sabía sobre el loop de eventos estaba mal
Daniel Khan / @dkhan
Who’s that guy? 

¿Quién es ese chico?
• Developer since 1999, Node.js since 2012

Developer desde 1999, Node.js desde 2012

• Member of Node.js Diagnostics working group

Miembro del grupo de trabajo Node.js Diagnostics

• Technical Product Manager and “Node.js guy” 

at Dynatrace

Director Técnico de Producto y "Node.js guy" en Dynatrace

• Lecturer for Node.js at a local university

Profesor de Node.js en una universidad local

• Course author for Lynda / LinkedIn

Autor del curso para Lynda / LinkedIn
Daniel Khan / @dkhanhttp://roundtripticket.me/austria-on-world-map.html
Daniel Khan / @dkhanhttps://laprensasa.com/culture/art-music/mozart-festival-texas-returns-uiw/
Daniel Khan / @dkhan
Daniel Khan / @dkhan
Daniel Khan / @dkhan
Daniel Khan / @dkhanTMN
Daniel Khan / @dkhanBy chensiyuan - chensiyuan, GFDL, https://commons.wikimedia.org/w/index.php?curid=20069520
Daniel Khan / @dkhan
What?

¿Qué?
Daniel Khan / @dkhan
Why?

¿Por qué?
Daniel Khan / @dkhan
• Node.js is Evented as is JavaScript in the Browser

Node.js es Evented como es JavaScript en el navegador

• Node.js runs in a Single Thread

Node.js se ejecuta en un solo subproceso
• In Node.js all I/O is Asynchronous

En Node.js, todas las E / S son asíncronas

• Libuv provides an Event Loop and a Thread Pool to achieve all of that

Libuv proporciona un loop de eventos y un grupo de hilos para lograr todo eso
What we know 

Lo que sabemos
Daniel Khan / @dkhan
Request 1
Request 2
Request 3
Request 4
Request 5
Traditional Request Handling

Manejo tradicional de solicitudes
Node.js Interwoven Thread Handling

Node.js Manejo de hilos entrelazados
Threads
Thread
Libuv
Show me a picture! 

¡Muestrame una foto!
Daniel Khan / @dkhan
Derived Misconceptions 

Conceptos erróneos derivados
• The event loop runs in a separate thread to the user code

El loop de evento se ejecuta en un hilo separado del código de usuario

• Everything that’s asynchronous is handled by a thread pool

Todo lo que es asincrónico es manejado por un grupo de subprocesos

• The event loop is something like a stack or queue

El loop de eventos es algo así como una pila o cola
Daniel Khan / @dkhan
Main Thread

JavaScript Code
castSpell(‘potion’, callback)
Event Loop
castSpell
castSpell
Callback
Result
WRONG
Spell 1 : Callback
Spell 2 : Callback
Spell 3 : Callback
Spell 4 : Callback
Daniel Khan / @dkhan
Daniel Khan / @dkhan
WRONG
Daniel Khan / @dkhan
Reality

Realidad
• The event loop runs in a separate thread than the user code

El loop de evento se ejecuta en un hilo separado del código de usuario

There is only one thread that executes JavaScript code and this is the thread where the
event loop is running.

Solo hay un hilo que ejecuta código JavaScript y este es el hilo donde se ejecuta el loop de evento.

• Everything that’s asynchronous is handled by a thread pool

Todo lo que es asincrónico es manejado por un grupo de subprocesos

Libuv creates a pool with four threads that is only used if no asynchronous API is available

Libuv crea un grupo con cuatro subprocesos que solo se usa si no hay una API asíncrona disponible
• The event loop is something like a stack or queue

El loop de eventos es algo así como una pila o cola

No … it’s a set of phases with dedicated data structures for each phase

No ... es un conjunto de fases con estructuras de datos dedicadas para cada fase

Daniel Khan / @dkhan
Timers
Callbacks
I/O Polling
Set Immediate
Close Events
Phases fases
Ticks
Datastructures

Estructuras de
datos
Threadpool
System
My Turn … 

Mi turno …
Daniel Khan / @dkhan
setTimeout(function() {console.log(‚hello‘)}, 1000);
setInterval(function() {console.log(‚hello‘)}, 1000);
Timers
Callbacks
I/O Polling
Set Immediate
Close Events
const server = http.createServer(requestHandler)
fs.readFile(‚/etc/passwd’, function(err, res) {
for(let i = 0; i < res.length; i++) {
console.log(res[i]);
}
});
setImmediate(function() {console.log(‚Immediate‘)});
socket.on(‚close‘, function() {console.log(‚socket closed‘)};
Daniel Khan / @dkhan
What about nextTick()?

¿Qué pasa con nextTick()?
Timers
I/O Callbacks
I/O Polling
Set Immediate
Close Events
Ticks
Daniel Khan / @dkhan
Daniel Khan / @dkhan
Metrics of the Event Loop

Métricas del loop de evento
Daniel Khan / @dkhan
Tick Frequency
The Number of Ticks per Time

El número de marcas por tiempo
How long does a Tick take?

¿Cuánto tiempo toma una garrapata?
Queue a task via setImmediate() and collect 

duration and count

Ponga en cola una tarea a través de setImmediate() 

y recopile la duración y el recuento
Timers
I/O Callbacks
I/O Polling
Set Immediate
Close Events
Tick Duration
Daniel Khan / @dkhan
• Idle looks similar to high load

Inactivo parece similar a la carga alta
• We don’t really know where the time is spent

Realmente no sabemos dónde se gasta el tiempo
Problems / Problemas
Daniel Khan / @dkhan
Timers
I/O Callbacks
I/O Polling
Set Immediate
Close Events
Why is the frequency low when there is no load?

¿Por qué la frecuencia es baja cuando no hay carga?
Daniel Khan / @dkhan
WaitonI/OPoll
Daniel Khan / @dkhan
Work Processed 

Latency

Latencia procesada 

por trabajo
How long does an asynchronous task 

wait to be executed

¿Cuánto tiempo espera que se ejecute 

una tarea asíncrona?
Schedule a task on the thread pool and measure

the time until it gets executed



Programe una tarea en el grupo de subprocesos y 

mida el tiempo hasta que se ejecute
Timers
I/O Callbacks
I/O Polling
Set Immediate
Close Events
Daniel Khan / @dkhan
Timers
I/O Callbacks
I/O Polling
Set Immediate
Close Events
TickDuration
Work Processed Latency
Daniel Khan / @dkhan
• High work processed latency = busy / exhausted threadpool

Latencia procesada de alto trabajo = threadpool ocupado / agotado
Insight / Visión
Daniel Khan / @dkhan
Event Loop
Latency
How long does a callback wait to be executed

¿Cuánto tiempo espera una devolución de
llamada para ejecutarse?
Schedule a callback and measure

the time until it gets executed

Programe una devolución de llamada y 

mida el tiempo hasta que se ejecute
Timers
I/O Callbacks
I/O Polling
Set Immediate
Close Events
Daniel Khan / @dkhan
setTimeout(foo,1000)
0 1000
Latency
Execution
What does “latency” mean here?

¿Qué significa "latencia" aquí?
Daniel Khan / @dkhan
• High event loop latency = event loop is busy processing callbacks

Latencia de loop de evento alto = loop de evento está ocupado procesando devoluciones de llamada
Insight / Visión
Daniel Khan / @dkhan
The Result!

¡El resultado!
Daniel Khan / @dkhan
Daniel Khan / @dkhan
What’s normal?
Event loop metrics need to be 

baselined and correlated 

over a longer period to detect anomalies



Las métricas de loop de eventos deben basarse 

y correlacionarse durante un período 

más largo para detectar anomalías
Daniel Khan / @dkhan
@dkhan
¡Gracias!
Daniel Khan / @dkhan
Daniel Khan / @dkhan
http://bit.ly/2ljSNin
Daniel Khan / @dkhan
Daniel Khan / @dkhan
@dkhan
¡Hasta la vista !❤!

Más contenido relacionado

Similar a Everything I thought I knew about the Node.js event loop was wrong

Introducción a Celery y las colas de tareas asíncronas
Introducción a Celery y las colas de tareas asíncronasIntroducción a Celery y las colas de tareas asíncronas
Introducción a Celery y las colas de tareas asíncronasalbertoalcolea
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPHP Vigo
 
Eventos, Escalabilidad, y la Nube.
 Eventos, Escalabilidad, y la Nube. Eventos, Escalabilidad, y la Nube.
Eventos, Escalabilidad, y la Nube.confluent
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJSBEEVA_es
 
Preparando el entorno de Red de Oracle Database 11gZ052 06
Preparando el entorno de Red de Oracle Database 11gZ052 06Preparando el entorno de Red de Oracle Database 11gZ052 06
Preparando el entorno de Red de Oracle Database 11gZ052 06Alexander Calderón
 
Dynamics saturday madrid 2019 sergio hernandez
Dynamics saturday madrid 2019 sergio hernandezDynamics saturday madrid 2019 sergio hernandez
Dynamics saturday madrid 2019 sergio hernandezDemian Raschkovan
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netAlberto Diaz Martin
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETAlberto Diaz Martin
 
S06.s1 - Material.pdf
S06.s1 - Material.pdfS06.s1 - Material.pdf
S06.s1 - Material.pdfSariFash
 
programacion concurrente java.pptx
programacion concurrente java.pptxprogramacion concurrente java.pptx
programacion concurrente java.pptxjuan gonzalez
 
Pasos para instalar un nodo fiware lab
Pasos para instalar un nodo fiware labPasos para instalar un nodo fiware lab
Pasos para instalar un nodo fiware labFernando Lopez Aguilar
 
Global Azure Devops Bootcamp 2019 => Avengers EndGame
Global Azure Devops Bootcamp 2019 => Avengers EndGameGlobal Azure Devops Bootcamp 2019 => Avengers EndGame
Global Azure Devops Bootcamp 2019 => Avengers EndGameAdrian Diaz Cervera
 
Aplicaciones escalables en Azure
Aplicaciones escalables en AzureAplicaciones escalables en Azure
Aplicaciones escalables en AzureGermán Küber
 
Oracle Coherence (by Leonardo Torres Altez)
Oracle Coherence (by Leonardo Torres Altez)Oracle Coherence (by Leonardo Torres Altez)
Oracle Coherence (by Leonardo Torres Altez)barcelonajug
 

Similar a Everything I thought I knew about the Node.js event loop was wrong (20)

19 javascript servidor
19 javascript servidor19 javascript servidor
19 javascript servidor
 
Introducción a Celery y las colas de tareas asíncronas
Introducción a Celery y las colas de tareas asíncronasIntroducción a Celery y las colas de tareas asíncronas
Introducción a Celery y las colas de tareas asíncronas
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigo
 
Eventos, Escalabilidad, y la Nube.
 Eventos, Escalabilidad, y la Nube. Eventos, Escalabilidad, y la Nube.
Eventos, Escalabilidad, y la Nube.
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
 
Concurrencia en Java
Concurrencia en Java Concurrencia en Java
Concurrencia en Java
 
Preparando el entorno de Red de Oracle Database 11gZ052 06
Preparando el entorno de Red de Oracle Database 11gZ052 06Preparando el entorno de Red de Oracle Database 11gZ052 06
Preparando el entorno de Red de Oracle Database 11gZ052 06
 
Dynamics saturday madrid 2019 sergio hernandez
Dynamics saturday madrid 2019 sergio hernandezDynamics saturday madrid 2019 sergio hernandez
Dynamics saturday madrid 2019 sergio hernandez
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NET
 
S06.s1 - Material.pdf
S06.s1 - Material.pdfS06.s1 - Material.pdf
S06.s1 - Material.pdf
 
"Al rico" PHP
"Al rico" PHP"Al rico" PHP
"Al rico" PHP
 
programacion concurrente java.pptx
programacion concurrente java.pptxprogramacion concurrente java.pptx
programacion concurrente java.pptx
 
Angular Fundamentals
Angular FundamentalsAngular Fundamentals
Angular Fundamentals
 
Pasos para instalar un nodo fiware lab
Pasos para instalar un nodo fiware labPasos para instalar un nodo fiware lab
Pasos para instalar un nodo fiware lab
 
Practical Spring Cloud
Practical Spring CloudPractical Spring Cloud
Practical Spring Cloud
 
Global Azure Devops Bootcamp 2019 => Avengers EndGame
Global Azure Devops Bootcamp 2019 => Avengers EndGameGlobal Azure Devops Bootcamp 2019 => Avengers EndGame
Global Azure Devops Bootcamp 2019 => Avengers EndGame
 
SEVILLA Meetups23032023.pdf
SEVILLA Meetups23032023.pdfSEVILLA Meetups23032023.pdf
SEVILLA Meetups23032023.pdf
 
Aplicaciones escalables en Azure
Aplicaciones escalables en AzureAplicaciones escalables en Azure
Aplicaciones escalables en Azure
 
Oracle Coherence (by Leonardo Torres Altez)
Oracle Coherence (by Leonardo Torres Altez)Oracle Coherence (by Leonardo Torres Altez)
Oracle Coherence (by Leonardo Torres Altez)
 

Más de Daniel Khan

AI, Bots, NLP, Slack and Alexa
AI, Bots, NLP, Slack and AlexaAI, Bots, NLP, Slack and Alexa
AI, Bots, NLP, Slack and AlexaDaniel Khan
 
I've been web developer for 17 years and this is what I've learned
I've been web developer for 17 years and this is what I've learnedI've been web developer for 17 years and this is what I've learned
I've been web developer for 17 years and this is what I've learnedDaniel Khan
 
Intro to Node.js (German)
Intro to Node.js (German)Intro to Node.js (German)
Intro to Node.js (German)Daniel Khan
 
Don't let just Node.js take the blame
Don't let just Node.js take the blameDon't let just Node.js take the blame
Don't let just Node.js take the blameDaniel Khan
 
Hunting Performance Problems in Node.js and beyond
Hunting Performance Problems in Node.js and beyondHunting Performance Problems in Node.js and beyond
Hunting Performance Problems in Node.js and beyondDaniel Khan
 
Don't let just Node.js take the blame
Don't let just Node.js take the blameDon't let just Node.js take the blame
Don't let just Node.js take the blameDaniel Khan
 
Introduction to User Experience Monitoring
Introduction to User Experience MonitoringIntroduction to User Experience Monitoring
Introduction to User Experience MonitoringDaniel Khan
 
Introducing User Experience Monitoring
Introducing User Experience MonitoringIntroducing User Experience Monitoring
Introducing User Experience MonitoringDaniel Khan
 
Splitting monolithsdeck slideshare_pdf
Splitting monolithsdeck slideshare_pdfSplitting monolithsdeck slideshare_pdf
Splitting monolithsdeck slideshare_pdfDaniel Khan
 

Más de Daniel Khan (9)

AI, Bots, NLP, Slack and Alexa
AI, Bots, NLP, Slack and AlexaAI, Bots, NLP, Slack and Alexa
AI, Bots, NLP, Slack and Alexa
 
I've been web developer for 17 years and this is what I've learned
I've been web developer for 17 years and this is what I've learnedI've been web developer for 17 years and this is what I've learned
I've been web developer for 17 years and this is what I've learned
 
Intro to Node.js (German)
Intro to Node.js (German)Intro to Node.js (German)
Intro to Node.js (German)
 
Don't let just Node.js take the blame
Don't let just Node.js take the blameDon't let just Node.js take the blame
Don't let just Node.js take the blame
 
Hunting Performance Problems in Node.js and beyond
Hunting Performance Problems in Node.js and beyondHunting Performance Problems in Node.js and beyond
Hunting Performance Problems in Node.js and beyond
 
Don't let just Node.js take the blame
Don't let just Node.js take the blameDon't let just Node.js take the blame
Don't let just Node.js take the blame
 
Introduction to User Experience Monitoring
Introduction to User Experience MonitoringIntroduction to User Experience Monitoring
Introduction to User Experience Monitoring
 
Introducing User Experience Monitoring
Introducing User Experience MonitoringIntroducing User Experience Monitoring
Introducing User Experience Monitoring
 
Splitting monolithsdeck slideshare_pdf
Splitting monolithsdeck slideshare_pdfSplitting monolithsdeck slideshare_pdf
Splitting monolithsdeck slideshare_pdf
 

Everything I thought I knew about the Node.js event loop was wrong

  • 1. Daniel Khan / @dkhan Everything I thought I knew about the Event Loop waswrong NodeConf Argentina / Daniel Khan / 28-10-2017 Todo lo que pensé que sabía sobre el loop de eventos estaba mal
  • 2. Daniel Khan / @dkhan Who’s that guy? 
 ¿Quién es ese chico? • Developer since 1999, Node.js since 2012
 Developer desde 1999, Node.js desde 2012 • Member of Node.js Diagnostics working group
 Miembro del grupo de trabajo Node.js Diagnostics • Technical Product Manager and “Node.js guy” 
 at Dynatrace
 Director Técnico de Producto y "Node.js guy" en Dynatrace • Lecturer for Node.js at a local university
 Profesor de Node.js en una universidad local • Course author for Lynda / LinkedIn
 Autor del curso para Lynda / LinkedIn
  • 3. Daniel Khan / @dkhanhttp://roundtripticket.me/austria-on-world-map.html
  • 4. Daniel Khan / @dkhanhttps://laprensasa.com/culture/art-music/mozart-festival-texas-returns-uiw/
  • 5. Daniel Khan / @dkhan
  • 6. Daniel Khan / @dkhan
  • 7. Daniel Khan / @dkhan
  • 8. Daniel Khan / @dkhanTMN
  • 9. Daniel Khan / @dkhanBy chensiyuan - chensiyuan, GFDL, https://commons.wikimedia.org/w/index.php?curid=20069520
  • 10. Daniel Khan / @dkhan What?
 ¿Qué?
  • 11. Daniel Khan / @dkhan Why?
 ¿Por qué?
  • 12. Daniel Khan / @dkhan • Node.js is Evented as is JavaScript in the Browser
 Node.js es Evented como es JavaScript en el navegador • Node.js runs in a Single Thread
 Node.js se ejecuta en un solo subproceso • In Node.js all I/O is Asynchronous
 En Node.js, todas las E / S son asíncronas • Libuv provides an Event Loop and a Thread Pool to achieve all of that
 Libuv proporciona un loop de eventos y un grupo de hilos para lograr todo eso What we know 
 Lo que sabemos
  • 13. Daniel Khan / @dkhan Request 1 Request 2 Request 3 Request 4 Request 5 Traditional Request Handling
 Manejo tradicional de solicitudes Node.js Interwoven Thread Handling
 Node.js Manejo de hilos entrelazados Threads Thread Libuv Show me a picture! 
 ¡Muestrame una foto!
  • 14. Daniel Khan / @dkhan Derived Misconceptions 
 Conceptos erróneos derivados • The event loop runs in a separate thread to the user code
 El loop de evento se ejecuta en un hilo separado del código de usuario • Everything that’s asynchronous is handled by a thread pool
 Todo lo que es asincrónico es manejado por un grupo de subprocesos • The event loop is something like a stack or queue
 El loop de eventos es algo así como una pila o cola
  • 15. Daniel Khan / @dkhan Main Thread
 JavaScript Code castSpell(‘potion’, callback) Event Loop castSpell castSpell Callback Result WRONG Spell 1 : Callback Spell 2 : Callback Spell 3 : Callback Spell 4 : Callback
  • 16. Daniel Khan / @dkhan
  • 17. Daniel Khan / @dkhan WRONG
  • 18. Daniel Khan / @dkhan Reality
 Realidad • The event loop runs in a separate thread than the user code
 El loop de evento se ejecuta en un hilo separado del código de usuario
 There is only one thread that executes JavaScript code and this is the thread where the event loop is running.
 Solo hay un hilo que ejecuta código JavaScript y este es el hilo donde se ejecuta el loop de evento. • Everything that’s asynchronous is handled by a thread pool
 Todo lo que es asincrónico es manejado por un grupo de subprocesos
 Libuv creates a pool with four threads that is only used if no asynchronous API is available
 Libuv crea un grupo con cuatro subprocesos que solo se usa si no hay una API asíncrona disponible • The event loop is something like a stack or queue
 El loop de eventos es algo así como una pila o cola
 No … it’s a set of phases with dedicated data structures for each phase
 No ... es un conjunto de fases con estructuras de datos dedicadas para cada fase

  • 19. Daniel Khan / @dkhan Timers Callbacks I/O Polling Set Immediate Close Events Phases fases Ticks Datastructures
 Estructuras de datos Threadpool System My Turn … 
 Mi turno …
  • 20. Daniel Khan / @dkhan setTimeout(function() {console.log(‚hello‘)}, 1000); setInterval(function() {console.log(‚hello‘)}, 1000); Timers Callbacks I/O Polling Set Immediate Close Events const server = http.createServer(requestHandler) fs.readFile(‚/etc/passwd’, function(err, res) { for(let i = 0; i < res.length; i++) { console.log(res[i]); } }); setImmediate(function() {console.log(‚Immediate‘)}); socket.on(‚close‘, function() {console.log(‚socket closed‘)};
  • 21. Daniel Khan / @dkhan What about nextTick()?
 ¿Qué pasa con nextTick()? Timers I/O Callbacks I/O Polling Set Immediate Close Events Ticks
  • 22. Daniel Khan / @dkhan
  • 23. Daniel Khan / @dkhan Metrics of the Event Loop
 Métricas del loop de evento
  • 24. Daniel Khan / @dkhan Tick Frequency The Number of Ticks per Time
 El número de marcas por tiempo How long does a Tick take?
 ¿Cuánto tiempo toma una garrapata? Queue a task via setImmediate() and collect 
 duration and count
 Ponga en cola una tarea a través de setImmediate() 
 y recopile la duración y el recuento Timers I/O Callbacks I/O Polling Set Immediate Close Events Tick Duration
  • 25. Daniel Khan / @dkhan • Idle looks similar to high load
 Inactivo parece similar a la carga alta • We don’t really know where the time is spent
 Realmente no sabemos dónde se gasta el tiempo Problems / Problemas
  • 26. Daniel Khan / @dkhan Timers I/O Callbacks I/O Polling Set Immediate Close Events Why is the frequency low when there is no load?
 ¿Por qué la frecuencia es baja cuando no hay carga?
  • 27. Daniel Khan / @dkhan WaitonI/OPoll
  • 28. Daniel Khan / @dkhan Work Processed 
 Latency
 Latencia procesada 
 por trabajo How long does an asynchronous task 
 wait to be executed
 ¿Cuánto tiempo espera que se ejecute 
 una tarea asíncrona? Schedule a task on the thread pool and measure
 the time until it gets executed
 
 Programe una tarea en el grupo de subprocesos y 
 mida el tiempo hasta que se ejecute Timers I/O Callbacks I/O Polling Set Immediate Close Events
  • 29. Daniel Khan / @dkhan Timers I/O Callbacks I/O Polling Set Immediate Close Events TickDuration Work Processed Latency
  • 30. Daniel Khan / @dkhan • High work processed latency = busy / exhausted threadpool
 Latencia procesada de alto trabajo = threadpool ocupado / agotado Insight / Visión
  • 31. Daniel Khan / @dkhan Event Loop Latency How long does a callback wait to be executed
 ¿Cuánto tiempo espera una devolución de llamada para ejecutarse? Schedule a callback and measure
 the time until it gets executed
 Programe una devolución de llamada y 
 mida el tiempo hasta que se ejecute Timers I/O Callbacks I/O Polling Set Immediate Close Events
  • 32. Daniel Khan / @dkhan setTimeout(foo,1000) 0 1000 Latency Execution What does “latency” mean here?
 ¿Qué significa "latencia" aquí?
  • 33. Daniel Khan / @dkhan • High event loop latency = event loop is busy processing callbacks
 Latencia de loop de evento alto = loop de evento está ocupado procesando devoluciones de llamada Insight / Visión
  • 34. Daniel Khan / @dkhan The Result!
 ¡El resultado!
  • 35. Daniel Khan / @dkhan
  • 36. Daniel Khan / @dkhan What’s normal? Event loop metrics need to be 
 baselined and correlated 
 over a longer period to detect anomalies
 
 Las métricas de loop de eventos deben basarse 
 y correlacionarse durante un período 
 más largo para detectar anomalías
  • 37. Daniel Khan / @dkhan @dkhan ¡Gracias!
  • 38. Daniel Khan / @dkhan
  • 39. Daniel Khan / @dkhan http://bit.ly/2ljSNin
  • 40. Daniel Khan / @dkhan
  • 41. Daniel Khan / @dkhan @dkhan ¡Hasta la vista !❤!