I/O-bound task

In programming, an I/O-bound task is a type of computing task that primarily spends its time waiting for input/output (I/O) operations to complete. These operations can include reading from or writing to a file, network communication, or interacting with external devices.

The speed of the I/O-bound tasks is limited by the system’s I/O capabilities rather than the CPU’s processing power.

When dealing with I/O-bound tasks, using asynchronous programming or multithreading can be beneficial. These techniques allow a program to perform other operations while waiting for I/O operations to complete. This behavior can improves the overall efficiency and responsiveness of the application.

Example

Here’s an example using Python’s asyncio module and the aiofiles library to handle an I/O-bound task consiting of reading data from different files:

Python
import asyncio
import aiofiles

async def read_file(filename):
    print(f"Starting to read {filename}")
    async with aiofiles.open(filename, mode="r") as file:
        content = await file.read()
    print(f"Finished reading {filename}")
    return content

async def main():
    await asyncio.gather(
        read_file("file1.txt"),
        read_file("file2.txt")
    )

# Usage
asyncio.run(main())

In this example, read_file() is an asynchronous function that reads data from a file. Using asyncio.gather(), you can read multiple files concurrently, which is advantageous when the task is I/O-bound.

Tutorial

Async IO in Python: A Complete Walkthrough

This tutorial will give you a firm grasp of Python’s approach to async IO, which is a concurrent programming design that has received dedicated support in Python, evolving rapidly from Python 3.4 through 3.7 (and probably beyond).

intermediate python

For additional information on related topics, take a look at the following resources:


By Leodanis Pozo Ramos • Updated May 21, 2025