Node.js uses an event-driven, non-blocking I/O model that makes it efficient at handling concurrent connections with a small number of threads.
When a request comes in, it is processed by the event loop, which determines what action to take based on the type of request. If the request requires I/O, such as reading from the filesystem or making an HTTP request, the event loop will delegate the task to the appropriate system library or external service and then continue to process other requests. When the I/O operation is complete, an event is triggered and the event loop can then handle the response.
This allows Node.js to handle many concurrent connections with a single thread, as the thread is not blocked waiting for I/O operations to complete. Instead, the thread is free to process other requests while the I/O operations are being performed in the background.