Reviewing concurrency basics
In this section, we'll cover the basics of multi-threading and clarify the terminology around concurrency and parallelism.
To appreciate the value of concurrent programming, we have to understand the need of today's programs to make decisions quickly or process a large amount of data in a short period of time. Several use cases become impossible to achieve if we strictly rely on sequential execution. Let's consider a few examples of systems that must perform multiple things simultaneously.
An autonomous car needs to perform many tasks at the same time, such as processing inputs from a wide array of sensors (to construct an internal map of its surroundings), plotting the path of the vehicle, and sending instructions to the vehicle's actuators (to control the brakes, acceleration, and steering). It needs to process continually arriving input events, and respond in tenths of a second.
There are also other, more mundane examples...