When to use concurrency
Based on our explanations given so far, it seems that having only one task is less problematic than having multiple tasks do the same thing concurrently. This is quite right; if you can write a program that runs acceptably without introducing concurrency, it is highly recommended that you do so. There are some general patterns we can use to know when we have to use concurrency.
In this section, we are going to walk through what these general patterns are, and how they lead us to split a program into concurrent flows.
A program, regardless of the programming language used, is simply a set of instructions that should be executed in sequence. In other words, a given instruction won't be executed until the preceding instruction has been executed. We call this concept a sequential execution. It doesn't matter how long the current instruction takes to finish; the next instruction must wait until the current one has been completed. It is usually said...