Всегда ли связанный с процессором поток запрашивает GIL в Python? - PullRequest
0 голосов
/ 23 марта 2019

Я просматривал слайды Дэвида Бизли, связанные с GIL, в попытке понять, что вызывает переключение потоков в Python. Тем не менее, многое из этого над моей головой.

http://www.dabeaz.com/python/UnderstandingGIL.pdf

Кажется, что после 100 тиков или около того текущий поток освобождает GIL и будет повторно запрашивать его, если он привязан к ЦП?

С другой стороны, если он спит или привязан к вводу / выводу, то другой поток получит GIL.

То есть, если поток связан с процессором, он будет перезапускаться до тех пор, пока не завершит задачу?

1 Ответ

3 голосов
/ 24 марта 2019

Он попытается повторно запросить GIL, пока это не будет сделано, или пока он не будет приостановлен при вводе-выводе или подобном.Однако, если в программе есть другие связанные с ЦП, они также будут пытаться получить GIL, поэтому всякий раз, когда GIL освобождается, необходим арбитраж, чтобы решить, кому будет разрешено его получать.

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

...