Node.js is similar in design too. Influenced by systems like Ruby’s Event Machine and Python’s Twisted. Node.js takes the event model a bit further. It presents an event loop as a runtime construct instead of as a library.
In other systems, there is always a blocking call to start the event-loop. Typically, we define behavior through callbacks at the beginning of a script. At the end, a server starts through a blocking call like EventMachine::run().
HTTP is a first-class citizen in Node.js, with streaming and low latency. This makes Node.js well suited for the foundation of a web library or framework.
Node.js, designed without threads, doesn’t mean you can’t take advantage of multiple cores in your environment. Child processes can be spawned by using our child_process.fork() API. They are easy to communicate with. Cluster module allows you to share sockets between processes to enable load balancing over your cores.