SKG Node.js December 2016
It's a data structure
It's a message loop
or a message dispatcher
Why?
Javascript uses it to achieve asynchronous programming
What is asynchronous programming?
Why do we care about it?
$.ajax({
url: "/data",
success: function (response) {
console.log(response);
},
});
function add() {
console.log('adding...');
return 2 + 2;
}
function print() {
var result = add();
console.log(result);
}
print();
function add() {
console.log('adding...');
return 2 + 2;
}
function print() {
var result = add();
console.log(result);
}
print();
| main |
function add() {
console.log('adding...');
return 2 + 2;
}
function print() {
var result = add();
console.log(result);
}
print();
| main |
function add() {
console.log('adding...');
return 2 + 2;
}
function print() {
var result = add();
console.log(result);
}
print();
| add |
| main |
function add() {
console.log('adding...');
return 2 + 2;
}
function print() {
var result = add();
console.log(result);
}
print();
| console.log |
| add |
| main |
function add() {
console.log('adding...');
return 2 + 2;
}
function print() {
var result = add();
console.log(result);
}
print();
| add |
| main |
function add() {
console.log('adding...');
return 2 + 2;
}
function print() {
var result = add();
console.log(result);
}
print();
| main |
function add() {
console.log('adding...');
return 2 + 2;
}
function print() {
var result = add();
console.log(result);
}
print();
| console.log |
| main |
function add() {
console.log('adding...');
return 2 + 2;
}
function print() {
var result = add();
console.log(result);
}
print();
| main |
function add() {
console.log('adding...');
return 2 + 2;
}
function print() {
var result = add();
console.log(result);
}
print();
| main |
function add() {
console.log('adding...');
return 2 + 2;
}
function print() {
var result = add();
console.log(result);
}
print();
Code that runs async
(i.e. in a non-blocking way)
uses callback functions
However,
this doesn't mean that every callback runs async
[1, 2, 3, 4].forEach(function (number) {
var result = LARGE_NUMBER ^ 999 + number;
})
Async functions that have finished, push their callback to the event loop
The event loop runs its functions when the call stack is empty
console.log('one');
setTimeout(function () {
console.log('two');
}, 0);
console.log('three');
for (var i = 0; i < 10000; i++) {
console.log('four');
}
console.log('one');
setTimeout(function () {
console.log('two');
}, 0);
console.log('three');
for (var i = 0; i < 10000; i++) {
console.log('four');
}
| console.log |
| main |
console.log('one');
setTimeout(function () {
console.log('two');
}, 0);
console.log('three');
for (var i = 0; i < 10000; i++) {
console.log('four');
}
| setTimeout() |
| main |
fn
Event loop
console.log('one');
setTimeout(function () {
console.log('two');
}, 0);
console.log('three');
for (var i = 0; i < 10000; i++) {
console.log('four');
}
| console.log |
| main |
fn
Event loop
console.log('one');
setTimeout(function () {
console.log('two');
}, 0);
console.log('three');
for (var i = 0; i < 10000; i++) {
console.log('four');
}
| console.log |
| main |
fn
Event loop
console.log('one');
setTimeout(function () {
console.log('two');
}, 0);
console.log('three');
for (var i = 0; i < 10000; i++) {
console.log('four');
}
| main |
fn
Event loop
console.log('one');
setTimeout(function () {
console.log('two');
}, 0);
console.log('three');
for (var i = 0; i < 10000; i++) {
console.log('four');
}
fn
Event loop
console.log('one');
setTimeout(function () {
console.log('two');
}, 0);
console.log('three');
for (var i = 0; i < 10000; i++) {
console.log('four');
}
| fn |
-
Event loop
console.log('one');
setTimeout(function () {
console.log('two');
}, 0);
console.log('three');
for (var i = 0; i < 10000; i++) {
console.log('four');
}
| console.log |
| fn |
-
Event loop
console.log('one');
setTimeout(function () {
console.log('two');
}, 0);
console.log('three');
for (var i = 0; i < 10000; i++) {
console.log('four');
}
| fn |
-
Event loop
console.log('one');
setTimeout(function () {
console.log('two');
}, 0);
console.log('three');
for (var i = 0; i < 10000; i++) {
console.log('four');
}
-
Event loop
setTimeout(function () {
console.log('one');
}, 2000);
setTimeout(function () {
console.log('two');
}, 2000);
setTimeout(function () {
console.log('three');
}, 2000);
setTimeout(function () {
console.log('four');
}, 2000);
Thank you for listening
What the heck is the event loop anyway?
by Philip Roberts
at JSConf EU 2014
Any questions?
Thank you for listening