Слайд 1EventLoop in NodeJS
Sergey Avanesyan
Слайд 2More than 5 years production experience in web development.
More than
1 year experience in EPAM Systems.
Experience in pure JavaScript.
Focus on
writing SPA using React and Redux.
Interest in Algorithms and Computer Science.
Senior software engineer
Слайд 3GOALS
Understand how nodejs works under a hood
Allows better understand code
effectively
write back-end JavaScript high-load application
Слайд 8The event loop is what allows Node.js to perform non-blocking
I/O operations — despite the fact that JavaScript is single-threaded
— by offloading operations to the system kernel whenever possible.
Слайд 10EventLoop structure and source code
Слайд 20Initialization stage END
> START
END
Слайд 21First circle START: nextTickQueue
> START
END
Слайд 22First circle: Other microtasks queue
> START
END
Next
Tick
Слайд 23First circle
> START
END
Next Tick
Promise
Слайд 24First circle: nextTickQueue
> START
END
Next Tick
Promise
Слайд 25First circle: Phase timers
> START
END
Next Tick
Promise
Promise Next Tick
Слайд 26First circle: nextTickQueue
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout
2
Слайд 27First circle: Other microtasks queue
> START
END
Next
Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
Слайд 28First circle: Phase pending callbacks
> START
END
Next
Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
Слайд 29First circle: nextTickQueue
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout
2
Слайд 30First circle: Other microtasks queue
> START
END
Next
Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
Слайд 31First circle: phase idle, prepare
> START
END
Next
Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
Слайд 33First circle: Other microtasks queue
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout
1
setTimeout 2
Слайд 34First circle: phase poll
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
Слайд 35First circle: nextTickQueue
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout
2
Слайд 36First circle: Other microtasks queue
> START
END
Next
Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
Слайд 37First circle: check
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout
2
Слайд 38First circle: nextTickQueue
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout
2
setImmediate
Слайд 39First circle: other microtasks queue
> START
END
Next
Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
setImmediate
Слайд 40First circle: phase close callbacks
> START
END
Next
Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
setImmediate
Слайд 41First circle END
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout
2
setImmediate
Слайд 42Second circle START: phase timers
> START
END
Next
Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
setImmediate
Слайд 43Second circle: phase pending callbacks
> START
END
Next
Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
setImmediate
Слайд 44Second circle: idle, prepare
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
setImmediate
Слайд 45Second circle: phase poll
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
setImmediate
Слайд 46Second circle
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
setImmediate
Слайд 47Second circle: nextTickQueue
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout
2
setImmediate
Слайд 48Second circle: other microtasks queue
> START
END
Next
Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
setImmediate
readFile Next Tick
Слайд 49Second circle: phase check
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
setImmediate
readFile Next Tick
Слайд 50Second circle: phase close callbacks
> START
END
Next
Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
setImmediate
readFile Next Tick
readFile setImmediate
Слайд 51Second circle END
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout
2
setImmediate
readFile Next Tick
readFile setImmediate
Слайд 52Third circle START: phase timers
> START
END
Next
Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
setImmediate
readFile Next Tick
readFile setImmediate
Слайд 53Third circle START: phase pending callbacks
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout
1
setTimeout 2
setImmediate
readFile Next Tick
readFile setImmediate
readFile setTimeout
Слайд 54Third circle START: phase idle, prepare
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout
1
setTimeout 2
setImmediate
readFile Next Tick
readFile setImmediate
readFile setTimeout
Слайд 55Third circle START: phase poll
> START
END
Next
Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
setImmediate
readFile Next Tick
readFile setImmediate
readFile setTimeout
Слайд 56Third circle START: phase check
> START
END
Next
Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout 2
setImmediate
readFile Next Tick
readFile setImmediate
readFile setTimeout
Слайд 57Third circle START: phase close callbacks
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout
1
setTimeout 2
setImmediate
readFile Next Tick
readFile setImmediate
readFile setTimeout
Слайд 58Third circle END
> START
END
Next Tick
Promise
Promise Next Tick
setTimeout 1
setTimeout
2
setImmediate
readFile Next Tick
readFile setImmediate
readFile setTimeout
Слайд 64Threadpool can be used to run user code and get
notified in the loop thread.
Its default size is 4,
but it can be changed at startup time by setting the UV_THREADPOOL_SIZE (process.env.UV_THREADPOOL_SIZE) environment variable to any value (the absolute maximum is 128).
Слайд 76materials
https://epa.ms/eventloop