🚀 More threads ≠ more performance.
One of the most important lessons in Python system design is knowing which concurrency model fits the workload.
For I/O-bound workloads
Think: APIs, databases, network requests, thousands of chat connections.
➡️ Async/concurrent processing works well because tasks spend time waiting, allowing other tasks to run.
For CPU-bound workloads
Think: image processing, heavy computation, data processing.
➡️ Adding more threads may not help much in standard CPython due to the GIL.
Instead, multiprocessing can utilize multiple CPU cores, with separate processes handling work in parallel. The attached experiment illustrates this difference clearly: concurrency helped workloads with waiting time, while multiple processes improved CPU-intensive work.
The key takeaway:
Don't choose async, threads, or processes because one sounds faster. Choose based on where your workload spends its time.
I/O-bound → Async / Concurrency
CPU-bound → Multiprocessing / Multiple Cores
Good system design isn't about using more resources.
It's about using the right resources for the right bottleneck. 🧠
Posted Aug 28, 2026, 7:40 AM UTC