Blocking vs non-blocking

A blocking operation:

console.log('Hello ' + write('Dribbit', 1000));

function write(text, delay) {
    var start = new Date().getTime();
    while (new Date().getTime() - start < delay) {
        // Waiting...
    return text;

console.log('End log');

In this example I use a function write, which uses a delay. When the delay is finished, the function returns a string. As you can see when running this function, the application doesn't execute any code untill the write function has ended. This is synchronous programming, all functions are staying in a queue waiting for the others to finish. As Node is single threaded, the complete application waits for the write function to finish. 

A non blocking operation:

setTimeout(function() {
}, 1000);

console.log('Hello ');

console.log('End log');

By changing the synchronous way into an asynchrounous way, the application doesn't wait. The setTimeout function has an anonymous function as a callback funtion. This callback function returns the result to the application without blocking the application.