Round 9: Concurrency and parallelism

A dependency graph of tasks that can be performed using 3 parallel resources.

(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.)