我的一個應用程序運行約100名工人。它最初是作爲一個threading
應用程序,但性能(延遲)問題受到打擊。所以我將這些工人轉換爲multiprocessing.Process
ES。下面的基準表明,以更多的內存使用(因子6)爲代價實現了負載的減少。通過多處理減少內存佔用?
那麼,如果Linux使用牛和工作人員不共享任何數據,那麼內存使用情況究竟是從哪裏來的呢?
如何減少內存佔用? (替代問題:如何減少threading
的負載?)
Linux 2.6.26,4個CPU的基準測試2G RAM: (請注意,cpu使用率是以一個cpu的%給出的,因此滿載爲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數據庫中。