Предположим, что поток пытается получить блокировку и заблокирован.Разве интерпретатор Python немедленно помещает этот поток в очередь «заблокированных»?
Python создает реальные потоки операционной системы, поэтому интерпретатор не должен выполнять очередей или планирования.
Единственное возможное исключение - глобальная блокировка , используемая интерпретатором для сериализации выполнения кода Python и доступа к объектам Python.Эта блокировка освобождается не только до получения блокировки потока, но и до любой (потенциально) операции блокировки, такой как чтение из дескриптора ввода-вывода или спящего режима.
Что такоеПреимущество asyncio, если в любом из двух вышеупомянутых случаев не используется занятое ожидание?
Преимущество состоит в том, что asyncio не требует нового потока ОС для каждой сопрограммы, которую он выполняет параллельно.Потоки ОС стоят дорого, а асинхронные задачи довольно легки.Кроме того, asyncio делает видимыми потенциальные точки переключения (ключевое слово await
), поэтому потенциал расы становится меньше.
Вы можете представить asyncio преемником Twisted , но ссовременный API и использование приостановленных сопрограмм вместо явной цепочки обратных вызовов.