@Lepilov

Понять асинхронный python на примере asyncio?

Приоткройте завесу непонимания принципа выполнения ассинхронного кода.
Есть два уровня контроля работы потоков при работе с python
1. GIL
Когда поток начинает работу, он выполняет захват GIL. Спустя какое-то время планировщик процессов решает, что текущий поток поработал достаточно, и передает управление следующему потоку. Поток №2 видит, что GIL захвачен, так что он не продолжает работу, а погружает себя в сон, уступая процессор потоку №1.
GIL может быть удержан потоком не дольше 5 мс

2. Обеспечением многозадачности занимается планировщик — часть ядра ОС, которая по очереди загружает потоки исполнения в центральный процессор.
На одном ядре процессора в единицу времени выполняется один поток. Он работает до тех пор, пока не израсходует свой квант времени (по умолчанию равен 100 мс) или сам не уступит управление следующему потоку, совершив системный вызов.

Что изменяет в этом поведении библиотека asyncio, блокирует gil, изменяет его поведение, влияет на планировщик задач или что то еще?
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Asyncio вообще не имеет никакого отношения к потокам, GIL и планировщику операционной системы. Асинхронность обеспечивается кооперативной многозадачностью. Грубо говоря asyncio просто запускает сопрограммы в цикле, они выполняются до операции ввода/вывода, после чего возвращают управление вызывающему коду, который запускает следующую сопрограмму.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
netpastor
@netpastor
Python developer
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы