When a program does more than one thing at a time, you have to decide how the work runs and how the tasks share data. The set of answers you pick is called a concurrency model.
This chapter covers what a concurrency model is, the main models used in real systems, the strengths and limits of each one, and how to choose between them.