Projemde, bir istemciden iş istekleri alan bir Java yürütme çerçevesi yapıyorum. İş (değişken boyut), bir görevler kümesine ayrılır ve daha sonra işlenmek üzere sıraya alınır. Her görev türünü işlemek için ayrı sıralar vardır ve her sıra bir ThreadPool ile ilişkilendirilir. ThreadPools, motorun genel performansı optimal olacak şekilde yapılandırılmıştır.İş/Görev Çalma ThreadPoolExecutor
Bu tasarım, istekleri etkili bir şekilde dengelememize yardımcı olur ve büyük istekler, sistem kaynaklarını boşa çıkarmaya son vermez. Ancak, zaman zaman bazı kuyruklar boş olduğunda ve ilgili iplik havuzları boşta kaldığında çözüm etkisiz hale gelir.
Bunu daha iyi hale getirmek için, yoğun bir şekilde yüklenen kuyruğun diğer ThreadPools'lardan yardım alabilmesi için bir iş/görev çalma tekniğinin uygulanmasını düşünüyordum. Ancak bu, Java gibi kendi Executor'ımın uygulanmasını gerektirebilir, birden çok sıra bir ThreadPool ile ilişkilendirilmesine izin vermez ve çalışma çalma konseptini desteklemez.
Çatal/Katılma hakkında bilgi edinin; ancak bu, ihtiyaçlar için uygun görünmüyor. Bu çözümü oluşturmak için herhangi bir öneri veya alternatif bir yol çok yardımcı olabilir.
Teşekkür Andy
Tüm CPU'larınızı nasıl meşgul edeceğinizi düşünmelisiniz. İşlemcinizden en iyi şekilde yararlanıyorsanız, bazı iplikleriniz boşta kalmaz. –
İş parçacığı havuzlarınızda cpus adında çok sayıda iş parçacığı varsa, diğer iş parçacığı havuzları boşta olsa bile, herhangi bir iş parçacığı havuzu tüm cpus'u "çalabilir". –
@PeterLawrey - bu doğru, ancak çok fazla havuz varsa, tüm havuzlardaki tüm dişler aynı anda çalışıyorsa, performansınız kötü olabilir. – jtahlborn