Concurrency vs Parallelism¶
Concurrency¶
Concurrency is the ability to make progress on multiple tasks during the same period of time.
The tasks do not have to execute simultaneously.
Instead, the system switches between tasks whenever one task is waiting, allowing multiple tasks to progress together.
Imagine a backend server handling multiple API requests.
- Request 1 is waiting for PostgreSQL.
- While it's waiting, the CPU starts processing Request 2.
- When Request 2 waits for Redis, the CPU starts Request 3.
Even though only one request may be executing at a particular instant, all requests continue making progress.
Conceptually,
Time ───────────────────────────────────────────►
Request 1 ███ Waiting ███ Running ███ Done
Request 2 ███ Running ███ Waiting ███ Done
Request 3 ███ Running ███ Waiting ███ Done
The CPU stays busy by switching between tasks instead of waiting.
Parallelism¶
Parallelism is the ability to execute multiple tasks at exactly the same time.
This requires multiple CPU cores or processors.
For example, on a machine with four CPU cores,
All four requests execute simultaneously.
No context switching is required because each task has its own CPU core.
Concurrency vs Parallelism¶
Concurrency
CPU
Task A ──────► Waiting
▲
│
Task B ──────────┘
│
▼
Task C
One CPU switches between multiple tasks.
Parallelism
Core 1 ───► Task A
Core 2 ───► Task B
Core 3 ───► Task C
Core 4 ───► Task D
Multiple CPU cores execute tasks simultaneously.
Backend Example¶
Suppose your application receives 100 API requests.
Each request performs the following operations.
- Read from PostgreSQL
- Read from Redis
- Call an external payment service
Most of the time is spent waiting for I/O.
Without Concurrency¶
Request 1 -----------------------> Done
Request 2 -----------------------> Done
Request 3 -----------------------> Done
Every request waits for the previous one to finish.
With Concurrency¶
Request 1 Waiting PostgreSQL
Request 2 Running
Request 3 Waiting Redis
Request 4 Running
Request 5 Waiting Payment API
Whenever one request waits for I/O, another request gets CPU time.
This improves resource utilization and increases throughput.
With Parallelism¶
Multiple requests execute at the same time.
This is ideal for CPU-intensive workloads.
When Should You Use Each?¶
Concurrency¶
Best for I/O-bound tasks.
Examples:
- Web servers
- Database queries
- Network requests
- File I/O
- External APIs
Parallelism¶
Best for CPU-bound tasks.
Examples:
- Image processing
- Video encoding
- Machine learning
- Mathematical computations
- Large data processing
Relationship Between Them¶
Concurrency and parallelism are related but different concepts.
Multiple Tasks
│
┌────────────┴────────────┐
│ │
▼ ▼
Concurrency Parallelism
Makes progress Executes tasks
on many tasks simultaneously
May use Requires
one CPU multiple CPU cores
A concurrent program is not necessarily parallel.
A parallel program is usually concurrent because multiple tasks are progressing simultaneously.
Follow-up Questions¶
What is concurrency?¶
Concurrency is the ability to make progress on multiple tasks during the same period of time.
The tasks may execute by taking turns.
What is parallelism?¶
Parallelism is the ability to execute multiple tasks simultaneously using multiple CPU cores.
Does concurrency require multiple CPU cores?¶
No.
A single CPU can achieve concurrency by switching between tasks.
Does parallelism require multiple CPU cores?¶
Yes.
True parallel execution requires multiple CPU cores or processors.
Which is better for web servers?¶
Concurrency.
Web servers spend most of their time waiting for databases, APIs, or network responses.
Which is better for CPU-intensive work?¶
Parallelism.
CPU-heavy tasks benefit from multiple CPU cores.
Common Interview Mistakes¶
❌ Thinking concurrency means tasks execute simultaneously.
✔ Concurrency means multiple tasks make progress together.
❌ Thinking concurrency requires multiple CPU cores.
✔ A single CPU can achieve concurrency through task switching.
❌ Thinking parallelism is always faster.
✔ Parallelism helps only when the workload can effectively use multiple CPU cores.
Interview Tip¶
A simple way to explain the difference is:
Concurrency is about dealing with multiple tasks at once.
Parallelism is about executing multiple tasks at once.
This distinction is easy to remember and is widely accepted in interviews.
Key Takeaways¶
- Concurrency allows multiple tasks to make progress together.
- Parallelism executes multiple tasks simultaneously.
- Concurrency does not require multiple CPU cores.
- Parallelism requires multiple CPU cores.
- Concurrency is best suited for I/O-bound workloads.
- Parallelism is best suited for CPU-bound workloads.
- In Python, threads and
asyncioprovide concurrency, while multiprocessing provides true parallelism.