Getting closer to the Boost.Asio library
Imagine we are developing an audio downloader application and we want the user to be able to navigate to all the menus in the application, even when the downloading process is in progress. If we do not use asynchronous programming, the application will be blocked by the downloading process and the user will have to wait until the downloading of the file is complete. But thanks to asynchronous programming, the user does not need to wait until the download process is complete to continue using the application.
In other words, a synchronous process is like queuing in a theater ticketing line. We will be served only if we reach the ticket counter and before that, we have to wait for all the processes of the previous costumers who are in front of us in the line to be completed. In contrast, we can imagine that the asynchronous process is like dinning in a restaurant where the waiter does not have to wait for the order of a customer to be prepared by the...