Use concurrency to hide I/O latency and improve throughput, not as a substitute for good algorithms.
Concurrency can improve performance, but only when it matches the problem: waiting on I/O, parallelizable CPU work, or throughput-oriented pipelines. It can also make systems slower when it adds contention, coordination, or unnecessary thread hopping.
This section connects Clojure’s concurrency tools (futures, agents, pmap, core.async, and the STM tools you learned earlier) to the performance problems they actually solve.
You will learn how to reason about overhead, backpressure, and the difference between making one request faster and making the whole system handle more work safely.