В одном из моих приложений работает около 100 рабочих. Он начинался как threading
приложение, но проблемы с производительностью (задержкой) были затронуты. Поэтому я преобразовал этих рабочих в multiprocessing.Process
es. Приведенный ниже тест показывает, что снижение нагрузки было достигнуто за счет увеличения использования памяти (коэффициент 6).
Так откуда же конкретно происходит использование памяти, если Linux использует корову, а работники не делятся данными?
Как я могу уменьшить объем памяти? (Альтернативный вопрос: как я могу уменьшить нагрузку на threading
?)
Тесты в Linux 2.6.26, 4 CPU 2G RAM:
(Обратите внимание, что загрузка процессора указана в% от одного процессора, поэтому полная загрузка составляет 400%. Числа получены из просмотра графиков Мунина.)
| threading | multiprocessing
------------------+-----------+----------------
memory usage | ~0.25GB | ~1.5GB
context switches | ~1.5e4/s | ~5e2/s
system cpu usage | ~30% | ~3%
total cpu usage | ~100% | ~50%
load avg | ~1.5 | ~0.7
Справочная информация: приложение обрабатывает события из сети и сохраняет некоторые из них в базе данных MySQL.