Форум сайта python.su
Kogrom прав. Создается множество потоков, но в одно время работает только один.
Я как-то потрудился это все детально описать: http://asvetlov.blogspot.com/2011/07/gil.html
Вопросы?
Офлайн
Я извиняюсь, за вопрос не относящийся непосредственно к многопоточности на уровне процессов/потоков конкретного алгоритма:
Если учесть, что в классическом варианте отработка скрипта это интерпретирование, а затем транслирование кода, то как будет срабатывать сам интерпретатор при практически параллельных запросах?
То есть, допустим, время интерпретации / трансляции кода составляет 100 мкс для одного и того же скрипта. И в этот интервал времени происходит 10 обращений на исполнение с интервалом в 10 мкс.
Сам интерпретатор Python будет динамически распределять внутри своих потоков на все доступные процессоры (ядра) задачи интерпретации / трансляции кода?
Или же интерпретатор работает в рамках нескольких потоков одного собственного процесса только на одном процессоре (ядре) ?
Офлайн
XCoderПодождите, что такое “транслирование” кода? Интерпретатор только интерпретирует код скрипта.
Если учесть, что в классическом варианте отработка скрипта это интерпретирование, а затем транслирование кода, то как будет срабатывать сам интерпретатор при практически параллельных запросах?
Офлайн
Александр КошелевИнтерпретатор интерпретирует - это значит транслирует и выполняет. А транслирует он ее в код виртуальной машины, именуемым байт-кодом. Что интерпретатор, что компилятор - оба они трансляторы. Сделайте из виртуальной машины физическую, - и интерпретатор чудным образом превратится в компилятор.
Подождите, что такое “транслирование” кода? Интерпретатор только интерпретирует код скрипта.
XCoderЭтим занимается ОС. Python (как процесс) лишь может самостоятельно регулировать количество своих собственных исполняемых потоков и самостоятельно же их синхронизировать. Один и тот же поток может какое то время выполняться на одном процессоре, затем на другом, потом на третьем, и только ОС этим заведует.
Сам интерпретатор Python будет динамически распределять внутри своих потоков на все доступные процессоры (ядра) задачи интерпретации / трансляции кода?
Отредактировано (Окт. 29, 2011 09:45:45)
Офлайн
Александр КошелевЯ имел в виду интерпретацию кода в байт-код (сырой код -> байт-код) и внутреннее транслирование уже на уровне виртуальной машины в инструкции (байт-код -> инструкции), которые исполняются (инструкции -> Profit =) ).
Подождите, что такое “транслирование” кода? Интерпретатор только интерпретирует код скрипта.
IsemТо, что поточностью управляет ОС понятно, но ведь синхронизация лежит на процессе интерпретатора.
Этим занимается ОС. Python (как процесс) лишь может самостоятельно регулировать количество своих собственных исполняемых потоков и самостоятельно же их синхронизировать.
Отредактировано (Окт. 29, 2011 16:04:58)
Офлайн
XCoderКонечно сможет, если он создает нитки (потоки) и не блокирует их сам.
Если допустить, что в сервере 16 ядер и (условно) крайне эффективный доступ к файловой системе (допустим RAM-диск), то сможет ли интерпретатор загрузить все 16 ядер одновременно для интерпретирования и исполнения в своих потоках 16 скриптов?
Офлайн
Не вполне уловил вопрос.
Питон создает code objects (байткод) при импорте модуля. Если кеш (.pyc файл) свежей исходника (.py) — грузится из кеша.
В любом случае никаких дополнительный потоков не создается, трансляция исходника в байткод — синхронная операция.
Более того, выставляется блок, запрещающий одновременный импорт из нескольких потоков. Так нужно.
Одни процесс питона 16 ядер не загрузит (маленькая оговорка: если этот процесс не использует интенсивно CPU затратные C Extensions, надолго отпускающие GIL во время вычислений — крайне редкий случай).
Офлайн
Андрей СветловЯ имею в виду не интерпретирование одного кода в 16 потоков, а интерпретирование 16-ти независимых кодов в отдельных потоках в рамках процесса интерпретатора.
Одни процесс питона 16 ядер не загрузит
Отредактировано (Окт. 30, 2011 05:14:00)
Офлайн
Все таки нужна конкретизация задачи.
Потоки и процессы решают схожие, но разные задачи.
Разное назначение дает разную реализацию.
Уже читали http://proft.me/2010/11/7/parallelizm-v-python/ ?
Офлайн
XCoderНе упретесь, по крайней мере в этом месте. У вас есть multiprocessing на крайний случай
Чтобы мне снова не упереться, но уже в ограничения реализации интерпретатора питона
Офлайн