Libuv has a queue of events that have completed and this is happening simultaneously inside of it. The most important part of libuv is the event loop. It’s a loop on which libuv is constantly checking the queue that something has happened.
When libuv sees something is completed on the queue it processes it and runs a callback. A callback is some code that should runs when certain code is finished running. Similar to an event listener.
Essentially the process is libuv sends a request to the operating system. The operating system adds the event to the queue. Once the event is completed in the queue the libuv event loop checks to see what events are completed and initiates callback function from the V8 engine of completed events. This happens synchronously one at a time on Node.js but also happens asynchronously since Node and V8 are running at the same time.