При использовании многопроцессорного пула число рабочих процессов должно быть таким же, как количество процессоров или ядер?
При использовании многопроцессорного пула Python количество рабочих процессов должно быть таким же, как количество процессоров или ядер?
В этой статье http://www.howtogeek.com/194756/cpu-basics-multiple-cpus-cores-and-hyper-threading-explained/ говорится, что каждое ядро действительно является центральным процессором на чипе ЦП. И поэтому кажется, что не должно быть проблем с наличием 1 процесса / ядра
Например, если у меня одна микросхема ЦП с 4 ядрами, можно ли запускать 1 процесс / ядро в общей сложности для 4 процессов без возможности снижения производительности.
2 ответа
Из того, что я узнал о питоне и многопроцессорности, лучший способ действий...
- Один процесс на ядро, но пропустите логические.
Гиперпоточность не помогает Python. Во многих случаях это действительно ухудшит производительность, но сначала, конечно, проверьте сами.
- Используйте модуль affinity (pip install affinity), чтобы привязать каждый процесс к определенному ядру.
По крайней мере, тщательно протестированные на окнах с использованием 32-битного Python, если этого не сделать, производительность значительно снизится из-за постоянной очистки кеша. И снова: пропустите логические ядра! Логические, если у вас есть процессор Intel с гиперпоточностью, 1,3,5,7 и т. Д.
Больше потоков, чем реальных ядер, вам ничем не поможет, если только не происходит ввод-вывод, чего не должно быть, если вы хрустите числами. Проверьте мои претензии самостоятельно, особенно если вы используете Linux, поскольку я вообще не тестировал Linux.
Это действительно зависит от вашей рабочей нагрузки. В каждом конкретном случае лучший подход - запустить тест производительности и посмотреть, каков результат.
Планирование процессов - это дорогостоящая операция: чем больше запущенных процессов, тем больше вам нужно изменить контекст.
Если большинство ваших процессов не запущены (например, они ожидают ввода-вывода), то чрезмерное выполнение может оказаться полезным. Напротив, если ваши процессы выполняются большую часть времени, добавление большего количества из них, утверждающих, что ваш процессор будет вредным.