Round 9: Concurrency and parallelism

(A dependency DAG.)
Learning objectives
In this round you will learn …
… that computing is in practice a concurrent activity, at all scales
… to set up and run independent threads of execution, in parallel
… that concurrency and parallelism present a challenge in programming terms
… that threads execute asynchronously, but often need to synchronize their activities over shared resources
… that some computations are inherently sequential and cannot be executed in parallel
… that the notions of dependent and independent steps in a computation
… to model dependency with a directed acyclic graph (DAG)
… that the notion of parallel speedup and Amdahl’s law
… to use the parallel collections library to get speedup
… to use futures and promises to enable parallel execution of your computations
(Material that is marked with one or more asterisks (*) is good-to-know, but not critical to solving the exercises or passing the course.)