Django + Uwsgi + CPU Hyperthread, будет ли это иметь преимущество в параллелизме?

Допустим, у меня есть проект django, работающий в режиме uwsgi emperor, с этим конфигом

processes = 4

Запуск на двухъядерном процессоре с включенной поддержкой гиперпоточности означает ли это, что у меня может быть [почти] истинный параллелизм обработки 4 запросов одновременно?

Будет ли он иметь существенное преимущество в производительности по сравнению с двухъядерным процессором без использования гиперпоточности?

А как насчет этого конфига на процессоре с / без Hyperthreading?

processes = 4
threads = 8
enabled-threads = true

2 ответа

Решение

Поскольку вы уже используете многопроцессорную uWSGI, enable-threads не увеличит производительность. Это может сэкономить вам только немного оперативной памяти, поэтому, если у вас недостаточно памяти, вам следует держаться подальше от потоков из-за GIL.

Что касается гиперпоточности, не угадывайте, тестируйте! Прирост производительности (или потеря) полностью зависит от приложения, поэтому попробуйте различные настройки, в том числе processes, Маловероятно, что вы получите 2-кратный выигрыш от HT, но все же это может быть значительным.

Да, несколько процессов могут (потенциально) работать на разных процессорах одновременно.

То же самое не полностью (верно) для потоков Python, поскольку поток в Python имеет блокировку (GIL), предотвращающую его одновременную работу с другим потоком.

Прежде чем выбрасывать потоки, примите во внимание, что GIL высвобождается в операциях блокировки и в основном всякий раз, когда вы используете API-интерфейс uWSGI (если вы его используете), поэтому потоки могут быть почти хорошими и (что более важно) они дают вам дешевый способ для увеличения параллелизма (который отличается от параллелизма), который важнее параллелизма в мире Интернета.

Другие вопросы по тегам