Q:

Why blocking code behaves better than non-blocking?

I have knocked up two little node.js snippets, that are doing the same thing, written in blocking and non-blocking ways, just to measure the performance diference. 
here goes:
non-blocking (the traditional node.js way):
var http = require('http');
var fs = require('fs');

var app = http.createServer(function(req, res){
  fs.readFile('lorem.txt',function(err, data){
    res.end(data);
  });
});

app.listen(8080);

blocking:
var http = require('http');
var fs = require('fs');

var app = http.createServer(function (req, res) {
  res.end(fs.readFileSync('lorem.txt'));
});

app.listen(8080);

lorem.txt is just a text file roughly 33kb in size.
running apache benchmark on against both shows no difference, or sometimes better performance for blocking version.
ab -n 100 -c 10 http://locahost:8080/
blocking: Time per request: 5.701 ms
non-blocking: Time per request: 8.401 ms

A:

Asynchronous method does have better performance in a broader sense i.e. smaller response times for more (majority) concurrent requests.
The benchmark you did is a corner case. Suppose you increase the number of concurrent requests or increase the size of response returned. I am sure the synchronous method will perform miserably. Synchronous method is not good because of smaller response but bad because it is not scalable at all. An average modern day computer can easily handle read/writes at such scale. What if you increase the filesze to 1MB ? or requests to 1 million? Think about a server which has to deal with gigabytes of storage and serve millions of requests. 
The core concept of node.js i.e. asynchronous, non-blocking, event driven I/O is built to solve problems of scalability like C10k. The conclusion you come to is one-sided, I am sure asynchronous method will win 99% of the time in real world.

