Интересно, как ведут себя потоки, когда борются за GIL, или немного информации отсюда только для Python3.
Сразу оговорюсь, что использую Ubuntu 16.04
c ядром 4.15.0-115-generic
, на машине стоит 4-х ядерный процессор Intel(R) Core(TM) i5-4200U CPU @ 1.60GHz
с 4 GB RAM.
Теория
Ни для кого не секрет, что в Linux библиотека потоков реализует стандарт POSIX threads. Реализация потоков в CPython использует данные потоки, из-за чего управление ими полностью осуществляется операционной системой.
GIL в Python3 это булевская переменная
locked
, доступ к которой защищен мьютексом mutex
, и при изменении которой в false
, ОС «сигнализирует» какому-то потоку, который ожидает условную переменную cond
.