Concurrency and asynchronicity are not the same thing.
If you go back to the first two paragraphs of this chapter, you'll notice that we are talking about conceptually related but nevertheless separate topics:
- One processor must be able to run several programs at the same time
- One program must (or at least should) be able to run on more than one processor at the same time
- A program may need to ask another process for assistance, and continue functioning while waiting for that help to arrive
The first point brings us to multithreading, and the second requires us to look at multiprocessing, both of which are aspects of concurrent programming.
The third point brings us to asynchronous programming.
Before we go any further, we will clear up what those terms mean.