What is an I/O-Bound Task?
An I/O-bound task is any operation where the program spends most of its time waiting for input/output (I/O) operations to complete, rather than using the CPU.
-
I/O = Input/Output → reading/writing files, making network requests, querying a database, or waiting for user input.
-
In I/O-bound programs, the CPU is mostly idle because it's waiting for the external resource to respond.
Examples of I/O-Bound Tasks in Python
-
File Handling
with open("large_file.txt", "r") as f: data = f.read() # waiting for disk I/O (slow compared to CPU)
-
Network Requests
import requests response = requests.get("https://api.github.com") # waiting for server response
-
Database Query
cursor.execute("SELECT * FROM users") # waiting for database to return data
CPU-Bound vs I/O-Bound
Aspect | CPU-Bound Task | I/O-Bound Task |
---|---|---|
Bottleneck | CPU speed (math, computation-heavy) | Waiting on external resources (disk, network) |
Examples | Image processing, machine learning, encryption | File I/O, API calls, DB queries |
Best Solution | Multiprocessing (use multiple cores) | Multithreading / Async I/O (overlap waiting) |
Why It Matters
-
If your task is I/O-bound, using multithreading or async/await helps, because while one task is waiting, another can run.
-
If your task is CPU-bound, you’ll need multiprocessing to leverage multiple CPU cores.
✅ Rule of Thumb:
-
Use threads/async for I/O-bound tasks.
-
Use processes for CPU-bound tasks.