<aside> 📖 todo:

Темы по асинхронному коду: Что такое async и await? aiohttp asyncio корутины event loop threading multiprocessing GIL для чего используется? Как мы с ними взаимодействует? Как влияет на приложение? Как обнаружить?

</aside>

Что такое async и await?

Какие библиотеки есть в python для конкурентного и параллельного выполнения кода?

Threading, multiprocessing, asyncio

Когда что использовать? У нас есть различные типы ожиданий: IO bound (ожидание ввода-вывода), CPU bound (программа зависит от скорости процессора). Если ждем задач от CPU, то нам подойдет только multiprocessing. Если ждём IO, то можем использовать threading или asyncio. Если быстрые задачи IO или python староват, то берем threading. Если python 3.6+ и IO медленный, то берем asyncio.

В Python существует многозадачность (multithreading) и многозадачность на уровне процессов (multiprocessing), но из-за GIL (Global Interpreter Lock) многозадачность на уровне потоков (threads) не всегда способна полностью использовать многозадачные возможности многопроцессорных систем.

Ключевые аспекты многозадачности в Python:

  1. Многозадачность на уровне процессов (Multiprocessing): Python поддерживает создание и управление отдельными процессами с помощью модуля multiprocessing. Каждый процесс имеет свой собственный интерпретатор Python и, следовательно, собственный GIL. Это позволяет полностью использовать многозадачные возможности многопроцессорных систем и выполнять параллельные задачи независимо.
  2. Многозадачность на уровне потоков (Multithreading): Python также поддерживает многозадачность на уровне потоков с использованием модуля threading. Однако из-за GIL, все потоки в одном процессе разделяют один и тот же интерпретатор Python, что ограничивает их способность эффективно использовать многозадачные возможности многопроцессорных систем. Это особенно заметно в CPU-интенсивных задачах.
  3. Многозадачность на уровне асинхронности (Asynchronous Multithreading): Для асинхронного программирования, связанного с I/O-интенсивными задачами, Python предоставляет модули asyncio и async/await, которые позволяют эффективно управлять множеством асинхронных задач с использованием одного потока.

Таким образом, в Python многозадачность возможна, но способность использования многозадачных ресурсов многопроцессорных систем зависит от конкретных сценариев и задач, а также от выбранного подхода (multiprocessing, multithreading или асинхронность).

Концепция event loop’а:

Рассказать, что это цикл по корутинам. Корутины возвращают future (промисы), у которых есть свои статусы. Важно не заблочить корутиной весь event loop.

+/- asyncio: