Programs involving communication over a network are the best examples of asynchronicity. Once a request is sent over a network, waiting for the response by blocking is bad design. Instead, programs must be able to execute other code fragments during this wait period. This design is particularly essential in web-servers. How can we achieve this? Non-blocking IO is the answer.