Асинхронное программирование позволяет выполнять несколько задач "одновременно" без блокирования основного потока выполнения программы. Вместо ожидания завершения длительной операции, программа переключается на выполнение других задач, а затем возвращается к предыдущей, когда та готова продолжить.
Ключевые понятия:
async def.Принцип работы:
Вместо последовательного выполнения блокирующих операций (например, запросов к сети, чтение с диска), асинхронное программирование использует кооперативную многозадачность. Сопрограмма, встречающая await на блокирующей операции, приостанавливает свое выполнение. Событийный цикл в этот момент может начать или продолжить выполнение других сопрограмм. Когда блокирующая операция завершается, событийный цикл возобновляет выполнение приостановленной сопрограммы.
Преимущества:
Основные библиотеки в Python:
asyncio: Стандартная библиотека для асинхронного программирования.aiohttp: Асинхронная клиент/серверная библиотека для HTTP.uvloop: Более быстрая альтернатива стандартному событийному циклу asyncio.python
Отличия от многопоточности и многопроцессности:
| Особенность | Асинхронное программирование | Многопоточность | Многопроцессность |
|---|---|---|---|
| Параллелизм | Кооперативная многозадачность (один поток CPU) | Параллелизм на уровне потоков | Параллелизм на уровне процессов |
| Использование I/O | Высокая эффективность для I/O-bound задач | Может быть неэффективно из-за GIL | Эффективно, но создание процессов дорого |
| Обмен данными | Прямой доступ к общим данным (внимательно с состоянием) | Требуются механизмы синхронизации (блокировки) | Требуются механизмы межпроцессного взаимодействия |
| Накладные расходы | Низкие на создание и переключение сопрограмм | Заметные на создание и переключение потоков | Высокие на создание процессов |
| Лучше для | I/O-bound задачи (сетевые запросы, чтение/запись файлов) | CPU-bound задачи (при обходе GIL) | CPU-bound задачи |