# Преимущество asyncio — *гранулярность*. Поток будет приостановлен не в момент, более или менее правильно намеченный ОС в соответствии со
# своими алгоритмами планирования, а в явно помеченной программистом точке.

# Процесс — приложение, которому выделена область памяти, недоступная другим приложениям.
# Поток — наименьшая сущность, которая может управляться напрямую операционной системой. У потоков нет своей памяти, они пользуются памятью
# создавшего их процесса. Потоки ассоциированы с создавшим их процессом. С каждым процессом всегда ассоциирован по меньшей мере один поток,
# обычно называемый *главным*.

# API модулей threading и multiprocessing похожи.

# Вкратце, GIL — ограничение, не позволяющее Python-процессу исполнять более одной команды байт-кода в каждый момент времени. GIL можно
# обойти при помощи многопроцессного подхода, т. к. у каждого процесса будет своя GIL.

# Сопрограмма asyncio — обычная функция Python, наделенная одной сверхспособностью: приостанавливаться, встретив операцию, для выполнения
# которой нужно существенное время. Для создания и приостановки сопрограммы нужно использовать ключевые слова async и await.
# async определяет сопрограмму, а await приостанавливает ее на время выполнения длительной операции.

# Важный момент — сопрограмма не выполняется при прямом вызове. Вместо этого возвращается объект сопрограммы, который будет выполнен позже.
# Чтобы выполнить сопрограмму, мы должны явно передать ее циклу событий.
