event loop
no race conditions
good for I/O bound tasks most web apps
bad for CPU intensive tasks
Slide 6
Slide 6 text
there is a need to handle a lot of “events”
Slide 7
Slide 7 text
Callback queue
Stack
Heap
V8
Event loop
Web APIs
DOM
XMLHttpRequest
WindowTimers
…
Slide 8
Slide 8 text
Callback queue
Stack
Heap
V8
Event loop
Node.js API
Process
…
HTTP
Slide 9
Slide 9 text
it’s good for both frontend and backend
Slide 10
Slide 10 text
Stack
Heap
V8
Slide 11
Slide 11 text
Stack
Heap
V8
Slide 12
Slide 12 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
console.log(sum);
}
!
logSum(1,
2);
Slide 13
Slide 13 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
console.log(sum);
}
!
logSum(1,
2);
logSum(1,
2)
Slide 14
Slide 14 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
console.log(sum);
}
!
logSum(1,
2);
logSum(1,
2)
add(a,
b)
Slide 15
Slide 15 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
console.log(sum);
}
!
logSum(1,
2);
logSum(1,
2)
add(a,
b)
a
+
b
Slide 16
Slide 16 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
-‐>
3
console.log(sum);
}
!
logSum(1,
2);
logSum(1,
2)
add(a,
b)
Slide 17
Slide 17 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
-‐>
3
console.log(sum);
}
!
logSum(1,
2);
logSum(1,
2)
Slide 18
Slide 18 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
-‐>
3
console.log(sum);
}
!
logSum(1,
2);
logSum(1,
2)
console.log(sum)
Slide 19
Slide 19 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
-‐>
3
console.log(sum);
}
!
logSum(1,
2);
logSum(1,
2)
Slide 20
Slide 20 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
-‐>
3
console.log(sum);
}
!
logSum(1,
2);
Slide 21
Slide 21 text
No content
Slide 22
Slide 22 text
asynchronous
Slide 23
Slide 23 text
event loop & callback queue
Slide 24
Slide 24 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
setTimeout(function
()
{
console.log(sum);
},
10);
}
!
logSum(1,
2);
Node.js APIs
Call stack
Slide 25
Slide 25 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
setTimeout(function
()
{
console.log(sum);
},
10);
}
!
logSum(1,
2);
logSum(1,
2)
Node.js APIs
Call stack
Slide 26
Slide 26 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
setTimeout(function
()
{
console.log(sum);
},
10);
}
!
logSum(1,
2);
logSum(1,
2)
add(a,
b)
Node.js APIs
Call stack
Slide 27
Slide 27 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
setTimeout(function
()
{
console.log(sum);
},
10);
}
!
logSum(1,
2);
logSum(1,
2)
add(a,
b)
a
+
b
Node.js APIs
Call stack
Slide 28
Slide 28 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
setTimeout(function
()
{
console.log(sum);
},
10);
}
!
logSum(1,
2);
logSum(1,
2)
add(a,
b)
Node.js APIs
Call stack
Slide 29
Slide 29 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
setTimeout(function
()
{
console.log(sum);
},
10);
}
!
logSum(1,
2);
logSum(1,
2)
setTimeout(func)
Node.js APIs
Call stack
Slide 30
Slide 30 text
after 10 milliseconds
Slide 31
Slide 31 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
setTimeout(function
()
{
console.log(sum);
},
10);
}
!
logSum(1,
2);
anonymous
func
Node.js APIs
Call stack
Slide 32
Slide 32 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
setTimeout(function
()
{
console.log(sum);
},
10);
}
!
logSum(1,
2);
anonymous
func
Node.js APIs
Call stack
Slide 33
Slide 33 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
setTimeout(function
()
{
console.log(sum);
},
10);
}
!
logSum(1,
2);
anonymous
func
console.log(sum)
Node.js APIs
Call stack
Slide 34
Slide 34 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
setTimeout(function
()
{
console.log(sum);
},
10);
}
!
logSum(1,
2);
anonymous
func
Node.js APIs
Call stack
Slide 35
Slide 35 text
function
add(a,
b)
{
return
a
+
b;
}
!
function
logSum(a,
b)
{
var
sum
=
add(a,
b);
setTimeout(function
()
{
console.log(sum);
},
10);
}
!
logSum(1,
2);
Node.js APIs
Call stack