In this article, we are going to look at how Node.js handles the operations on the server-side with its very popular asynchronous and concurrency model.

I/O operation means communication between a single process in a computer CPU with anything outside of that CPU. It can be a memory, disk, network, or even a process. The signals are shared in this communication. Most of the operations performed by a computer are I/O operations. In the server-side environment, I/O operations reference the disk and network resources access, which are comparatively slow to other operations.

There are many ways to handle these I/O operations. We can perform synchronously, but this is inefficient as one operation depends on the execution of another operation. We can fork a new process from the OS to handle each request, but during the scenario of lots of requests, it is difficult to carry out. There is another way, that is **Thread **which is considered a good way but it becomes a headache when threads access shared resources.

Node and JavaScript are single-threaded. It means that they can handle only one task at a time. But this won’t lead to better performance in the case of slow operations. Node uses three techniques: non-blocking I/O, events, and asynchronous API to handle slow I/O operations without blocking the main execution runtime.

Nonblocking I/O

This means that a program can make a request for a network resource while doing something else, and then, when the network operation has finished, a callback will run that handles the result. Node uses a library called libuv to provide access to non-blocking network calls.

Even though Node application is single-threaded, it contributes to nonblocking I/O with the help of event loops and asynchronous API.

Node is powered by Google Chrome V8 JavaScript engine. It compiles the JavaScript code to machine code as well as handles interpretation and running of javaScript code. As I already said, Node libuv, which handles the I/O operations, is used with the V8 engine with the help of C++ binding layer.

#nodejs #programming #javascript

Node.js Asynchronous and Concurrency Model
1.10 GEEK