Почему Python переключает потоки? - PullRequest
0 голосов
/ 18 января 2019

В документации Python о потоках и GIL говорится:

Чтобы эмулировать параллелизм выполнения, интерпретатор регулярно пытается переключать потоки (см. sys.setswitchinterval())

Зачем это делать? Эти переключатели контекста, кажется, не делают ничего, кроме потери времени. Не быстрее ли будет запустить каждый процесс, пока он не освободит GIL, а затем запустить следующий?

1 Ответ

0 голосов
/ 18 января 2019

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

Чтобы обеспечить запуск каждого потока, поток по умолчанию отбросит GIL через 5 мс (Python 3), если он не сделал этого раньше из-за ожидания ввода-вывода.

Вы можете изменить этот интервал с помощью sys.setswitchinterval().

Threading - это простой метод параллелизма. Для более эффективной техники параллелизма обратитесь к asyncio, который предлагает однопоточный параллелизм с использованием сопрограмм.

...