Uygulamalarımdan biri yaklaşık 100 çalışanı çalıştırıyor. Bir threading
uygulaması olarak başladı, ancak performans (gecikme) sorunları vuruldu. Bu yüzden bu çalışanları multiprocessing.Process
es'e dönüştürdüm. Aşağıdaki ölçüt, yükteki azalmanın daha fazla bellek kullanımı maliyetiyle sağlandığını göstermektedir (faktör 6).Çoklu işlemle bellek ayak izinin azaltılması?
Linux, ineği kullanıyorsa ve çalışanlar herhangi bir veri paylaşmıyorsa bellek kullanımı tam olarak nereden geliyor?
Bellek izi nasıl azaltabilirim? (Alternatif soru: Nasıl threading
için yükünü azaltabilir?)
Linux 2.6.26, 4 CPU 2G üzerinde Deneyler RAM: (yani cpu kullanımı bir cpu% olarak verilen, bu nedenle tam yük% 400'dür Not . numaraları Munin grafikler bakarak türetilmiştir)
| 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
Arka Planı. uygulama ağı olaylarını işleme ve MySQL veritabanı bazıları depolanmasıdır.