nodejs - Why Node.js can handle large number of simulteneous persistent connections?

networking, node.js, tcp

Solution

Node.js makes all I/O asynchronous. It only runs in a single thread, but will do other requests or operations while waiting on I/O.

In contrast, classical web servers will not serve another request until the previous one is fully done. For this reason, Apache runs several processes at the same time; let's say there's 10 `httpd` processes, that normally means 10 requests can be served at any one time (*). If the processes take more time to complete, you will serve less requests - or will have to spawn more processes, even if the process is doing nothing - like waiting for the database to chew up and return data.

A node.js process, faced with a request that will go to the database, leaves the database to work while it goes to serve another request.

*) MPM makes this not quite true, but true enough for all intents and purposes.

Problem

I know Node.js is good at keeping large number of simultaneous persistent connections, for example, a chat room for many many chatters. I am wondering how it achieves this. I mean anyway it is using TCP/IP which is encapsulated by the underlying OS, why it can handle persistent connections so well that others cannot? What is the magic thing does it have?

Original source