Kogrom прав. Создается множество потоков, но в одно время работает только один.
Я как-то потрудился это все детально описать: http://asvetlov.blogspot.com/2011/07/gil.html
Вопросы?
XCoderПодождите, что такое “транслирование” кода? Интерпретатор только интерпретирует код скрипта.
Если учесть, что в классическом варианте отработка скрипта это интерпретирование, а затем транслирование кода, то как будет срабатывать сам интерпретатор при практически параллельных запросах?
Александр КошелевИнтерпретатор интерпретирует - это значит транслирует и выполняет. А транслирует он ее в код виртуальной машины, именуемым байт-кодом. Что интерпретатор, что компилятор - оба они трансляторы. Сделайте из виртуальной машины физическую, - и интерпретатор чудным образом превратится в компилятор.
Подождите, что такое “транслирование” кода? Интерпретатор только интерпретирует код скрипта.
XCoderЭтим занимается ОС. Python (как процесс) лишь может самостоятельно регулировать количество своих собственных исполняемых потоков и самостоятельно же их синхронизировать. Один и тот же поток может какое то время выполняться на одном процессоре, затем на другом, потом на третьем, и только ОС этим заведует.
Сам интерпретатор Python будет динамически распределять внутри своих потоков на все доступные процессоры (ядра) задачи интерпретации / трансляции кода?
Александр КошелевЯ имел в виду интерпретацию кода в байт-код (сырой код -> байт-код) и внутреннее транслирование уже на уровне виртуальной машины в инструкции (байт-код -> инструкции), которые исполняются (инструкции -> Profit =) ).
Подождите, что такое “транслирование” кода? Интерпретатор только интерпретирует код скрипта.
IsemТо, что поточностью управляет ОС понятно, но ведь синхронизация лежит на процессе интерпретатора.
Этим занимается ОС. Python (как процесс) лишь может самостоятельно регулировать количество своих собственных исполняемых потоков и самостоятельно же их синхронизировать.
XCoderКонечно сможет, если он создает нитки (потоки) и не блокирует их сам.
Если допустить, что в сервере 16 ядер и (условно) крайне эффективный доступ к файловой системе (допустим RAM-диск), то сможет ли интерпретатор загрузить все 16 ядер одновременно для интерпретирования и исполнения в своих потоках 16 скриптов?
Андрей СветловЯ имею в виду не интерпретирование одного кода в 16 потоков, а интерпретирование 16-ти независимых кодов в отдельных потоках в рамках процесса интерпретатора.
Одни процесс питона 16 ядер не загрузит
XCoderНе упретесь, по крайней мере в этом месте. У вас есть multiprocessing на крайний случай
Чтобы мне снова не упереться, но уже в ограничения реализации интерпретатора питона