In the previous chapter, we discussed various concurrency implementation models available in Python. To better explain the concept of concurrency, we used the following definition: Two events are concurrent if neither can causally affect the other.
We often think about events as ordered points in time that happen one after another, often with some kind of cause-effect relationship. But, in programming, events are understood a bit differently. They aren't things that happen. Events in programming are just independent units of information that can be processed by the program. And that very notion of events is a real cornerstone of concurrency.
Concurrent programming is a programming paradigm for processing concurrent events. And there is a generalization of that paradigm that deals with the bare concept of events – no matter whether...