Про блокирующие операции.

vs2007

Пользователь
Пользователь
Май 24, 2020
16
5
3
Есть некоторая последовательность кода Python, выполняющаяся синхронно. Когда доходит до выполнения т.н. "блокирующих операций" (различные таймеры, ввод-вывод, сеть), выполнение кода Python приостанавливается (GIL) до окончания выполнения этих операций.
М.б. это глупый вопрос, но КТО (или ЧТО) выполняет непосредственно эти "блокирующие операции", пока остановлено выполнение программы на Python?
 

MaksimD

Пользователь
Пользователь
Май 12, 2020
51
11
8
КТО (или ЧТО) выполняет непосредственно эти "блокирующие операции", пока остановлено выполнение программы на Python?
Если в кратце то это опрерационая система отвечает за запуск, блокировку и порядок выполнения потоков. Если операцыя слишком долгая и сильно грусит систму, то можешь только чаще делать проверять на сигнал "остановить поток" что бы ОС могла прервать выполненя основного потока чтобы запустит другую команду на исполнения.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Есть некоторая последовательность кода Python, выполняющаяся синхронно. Когда доходит до выполнения т.н. "блокирующих операций" (различные таймеры, ввод-вывод, сеть), выполнение кода Python приостанавливается (GIL) до окончания выполнения этих операций.
М.б. это глупый вопрос, но КТО (или ЧТО) выполняет непосредственно эти "блокирующие операции", пока остановлено выполнение программы на Python?
Эти блокирующие операции выполняет основной поток программы, поэтому выполнение остального кода и приостанавливается. Если блокирующие операции вынести в другие потоки, то они не будут приостанавливать выполнение кода в основном потоке.
 

vs2007

Пользователь
Пользователь
Май 24, 2020
16
5
3
Эти блокирующие операции выполняет основной поток программы, поэтому выполнение остального кода и приостанавливается. Если блокирующие операции вынести в другие потоки, то они не будут приостанавливать выполнение кода в основном потоке.
Тогда вопрос: а разве один интерпретатор Python может управлять несколькими потоками?
 

vs2007

Пользователь
Пользователь
Май 24, 2020
16
5
3
Если в кратце то это опрерационая система отвечает за запуск, блокировку и порядок выполнения потоков. Если операцыя слишком долгая и сильно грусит систму, то можешь только чаще делать проверять на сигнал "остановить поток" что бы ОС могла прервать выполненя основного потока чтобы запустит другую команду на исполнения.
Понятно, только что-то это сильно напоминает работу в однозадачной ОС.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Тогда вопрос: а разве один интерпретатор Python может управлять несколькими потоками?
Потоки в python есть, многопоточные приложения тоже. Значит может.
 

MaksimD

Пользователь
Пользователь
Май 12, 2020
51
11
8
Понятно, только что-то это сильно напоминает работу в однозадачной ОС.
Тут речь не про ОС, а про центральный процессор. Говно-маркетологи, чтобы продать побольше, придумывают про многопоточность и многоядерность. На деле центральный процессо(ЦП) выполняет только одну инструкцию за такт, а не сразу много. ЦП просто переключается очень быстро между потоками и тем самым создается иллюзия многопоточности.
 

vs2007

Пользователь
Пользователь
Май 24, 2020
16
5
3
Спасибо за ответы. Просто Python отличается от тех ЯП, на которых программировал раньше.
 

Форум IT Специалистов