Concurrency is about structure — designing a program to handle multiple tasks.
Parallelism is about execution — actually running multiple tasks simultaneously.
"Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once."
— Rob Pike
| Aspect | Concurrency | Parallelism |
|---|---|---|
| What | Managing multiple tasks | Executing multiple tasks |
| How | Interleaving, switching | Simultaneous on multiple cores |
| Requires | Design/structure | Hardware (multiple CPUs) |
| Analogy | One chef juggling multiple dishes | Multiple chefs cooking at once |
Async is a programming model for concurrency — it lets you express "start this, don't wait, continue" without blocking.
| Model | Mechanism |
|---|---|
| Threads | OS-managed, preemptive switching |
| Async/Await | Programmer-managed, cooperative yielding |
| Actors | Message-driven, isolated state |
All three are ways to achieve concurrency. Parallelism is whether they run on multiple cores.
Your arbitrage engine is concurrent (multiple data sources, multiple comparisons) and can be parallel (goroutines scheduled across cores). The sharding strategy determines how concurrency maps to parallelism.