Node.js is a JavaScript runtime built on
Chrome's V8 JavaScript engine.
Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient.
Reactor Pattern event-driven model
I/O request
Event Loop
Event
Demultiplexer
Queue
Hardware
I/O
Enqueue Event
Execute Event Handler
> fs.readFile('./file.txt', cb);
> uv__fs_read(req)
> cb(null, data);
Your Code
V8
operating system
C++ Bindings
Core Modules
libuv
c-ares, zlib, etc...
Node.js architecture
Timers
Immediate
close events
process.exit
index.js
refs++
refs--
refs==0
refs=0
refs>0
process.nextTick
Promise
nextTick
timers
I/O Poll
pending I/O callbacks
idle handlers
prepare handlers
Check handlers
Close handlers
Run expired timers
Run completed I/O handlers
Wait for I/O to complete
Some checking after polling
Run close handlers
JavaScript
Finished I/O work or I/O Errors
setTimeout setInterval
setImmediate
.on('close'... handlers
epoll
kqueue
event ports
Thread Pool
linux
BSD
SunOS
IOCP
Windows
Network I/O
File I/O
DNS
...
Non-Blocking I/O
Blocking I/O
UV_THREADPOOL_SIZE=8 (SIZE<=128)
Thread pool
CPU intensive
Why not native
Native Promise
Bluebird
Promise queue
Immediate queue
event in queue
callback
macrotask
microtask
By Nairi Harutyunyan
You Don't Know NodeJS EventLoop
Big fan of JavaScript