Node.js uses an event-driven, non-blocking I/O model to handle asynchronous operations efficiently. When a function initiates an asynchronous operation, it does not wait for the operation to complete. Instead, it continues executing the rest of the code. When the asynchronous operation completes, a callback function is called to handle the result. This approach allows Node.js to handle multiple requests concurrently, making it well-suited for building scalable and high-performance applications.