Comments 9
GIL отпускается в io баунд задачах.
Операционная система как обычно переключает потоки и все задачи таки выполняются.
С той разницей, что async код сам говорит, что он отпускает поток выполнения, а операционная система приходит раз 5 милисекунд.
Ну и потоки больше потребляют памяти, сильно много их не запустишь, а корутин можно запустить тысячи, десятки тысяч.
Очень круто, спасибо! Сохранил в закладках
Спасибо за статью, освежил знания
чебупели
Спасибо за статью, узнал что-то новое.
GIL ... это фигня, которая позволяет за раз выполняться только 1 потоку. Это сделано для того, чтобы несколько потоков не пытались одновременно изменить одни и те же данные.
GIL сериализует доступ к интерпретатору, а не данным как таковам. Сам по себе GIL не мешает потокам выполняться одновременно и изменять одни и те же значения (чтобы этого не допускать приходится использовать примитивы синхронизации). Async в этом смысле тоже ни чего не решает. Зато он даёт возможность наступить на те же грабли даже в рамках одного потока.
Полезность async с самого начала была сильно переоценина. Это не причина отказываться, просто повод хорошо подумать - правда-ли оно вам нужно. Обычный синхронный код гораздо проще отлаживать и поддерживать. Делать обработку тысяч соединений в один поток - идея в любом случае так себе.
Суть асинхронности в python