Concurrency & Parallelism Roadmap

From telling overlapping progress apart from simultaneous execution, through shared state, synchronization, deadlock and contention, to parallel decomposition, memory visibility and the judgement to decide that a system does not need any of it.

0 / 154 roadmap lessons mastered0%
  1. 1

    Concurrency, parallelism, tasks and threads

    0 / 16 mastered

    Separate "these things overlap" from "these things run at the same instant", and pick the unit of execution from the shape of the work rather than from habit.

    Outcome · You can look at a piece of work, say whether it is waiting-bound or compute-bound, and name the execution model that follows — including the case where the answer is "run it sequentially".
    Prove it — The scheduler lab →
  2. 2

    Shared state, races and critical sections

    0 / 15 mastered

    Name the invariant before naming a primitive, and find the schedule that breaks it.

    Outcome · Given a function that two threads call, you can write down what must stay true, produce an interleaving that violates it, and say whether the fix is a lock or the removal of the sharing.
    Prove it — Break the counter →
  3. 3

    Mutexes, semaphores and condition variables

    0 / 11 mastered

    Choose the primitive from the guarantee you need, and hold it over the smallest region that preserves the invariant.

    Outcome · You can say what a mutex guarantees and what it does not, why a condition variable is always waited on in a loop, and why "thread-safe" is a claim about a type's operations rather than a property you can sprinkle on.
    Prove it — Fix the counter →
  4. 4

    Async, promises, coroutines and event loops

    0 / 16 mastered

    Understand what suspending a task actually does, what keeps running while it is suspended, and who owns a task once it is started.

    Outcome · You can explain why an await in a loop is a latency bug and an unbounded Promise.all is a capacity bug, and why a task with no owner is the async equivalent of a leaked thread.
    Prove it — Stall the event loop →
  5. 5

    Thread pools, worker pools, producer/consumer and backpressure

    0 / 17 mastered

    Treat concurrency as a budget you set rather than a number that emerges, and decide what happens to the work that does not fit.

    Outcome · You can size a pool by reasoning rather than by folklore, and you can say exactly what a full queue should do — block, drop, or reject — and defend the choice.
    Prove it — Set a concurrency budget →
  6. 6

    Deadlocks, starvation, livelock and contention

    0 / 15 mastered

    Explain how a system full of correct code stops making progress, and how to make the failure structurally impossible rather than unlikely.

    Outcome · You can draw a wait-for graph from a stack trace, name which of the four deadlock conditions your fix removes, and explain why the eight-core box was slower than the two-core one.
    Prove it — Deadlock lab →
  7. 7

    Atomics, memory ordering and lock-free

    0 / 15 mastered

    Learn what an atomic operation actually makes indivisible, why another thread might not see your write at all, and why lock-free is a progress guarantee rather than a speed claim.

    Outcome · You can explain why counter.fetch_add(1) is safe and if (!cache) cache = build() on an atomic pointer is not, and why the fix for double-checked locking is a memory-model question, not a syntax one.
    Prove it — Watch a CAS loop retry →
  8. 8

    Parallel algorithms, fork/join and SIMD

    0 / 18 mastered

    Decompose a computation into independent work, and predict the ceiling before writing any of it.

    Outcome · You can compute the best speedup a decomposition can ever reach from its serial fraction and its span, and you know when the parallel version will lose to the sequential one.
    Prove it — Scaling lab →
  9. 9

    Parallel performance, debugging and production concurrency

    0 / 31 mastered

    Receive "it is slow and occasionally wrong, and it only happens in production" and answer it with evidence instead of guesses.

    Outcome · You can instrument a concurrent system so the next failure leaves evidence, and you can design one whose concurrency model you are able to defend line by line — including the parts you chose to leave sequential.
    Prove it — Concurrency capstone →