Windows распределяет потоки Python по ядрам?

Как известно, Python базово однопоточный, GIL виноват и т.д.
Поднимаем вебсервер на Python, под каждый запрос посетителя создаем отдельный thread чтобы быстро освобождать вход, нагрузка растет, threads одновременно уже сотни, вопрос - начнет винда распределять их по ядрам, или только самому ручками стряпать распределитель?
Собственно вопрос из целесообразности многоядерного сервера без ворот типа nginx.
  • Вопрос задан
  • 362 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Начнёт, но работать в один момент времени будет только одно ядро. Утилизация процессоров в Python решается запуском отдельного процесса на каждое ядро, а внутри процесса лучше использовать асинхронность, а не многопоточность.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg
Любые ответы на любые вопросы
Запуск тредов в количестве, которое превышает количество ядер - это путь к драматическому росту latency и падению скорости.

Что в Windows (IO Completion Ports), что в Linux (epoll), все самые свежие механизмы обслуживания массовых TCP подключений запускают ровно столько тредов, сколько есть ядер, и спулят между ними события из сокетов. Именно поэтому перед разного рода скриптульками на Питоне ставят Большого Железного Феликса (nginx), который будет оптимально запихивать IO в нужные задачи.

Без этого будут происходить многократные дерганья контекстов и сбросы кэшей на процессоре, причем не тогда, когда это имеет смысл (операция IO завершилась, кэш не нужен), а когда попало.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы