2015-09-25 33 views
8

Planlanmış yükü desteklemek için gereken maksimum iş parçacığı sayısını bulmak için uygulamamın üzerine yük testi uygulamıştım.Java CachedThreadHavuz vs FixedThreadPool

ExecutorServiceCachedThreadPool'u kullanıyorum, böylece iş parçacıkları dinamik olarak yük temelinde oluşturulur. Şimdi getLargestPoolSize() kullanarak maksimum iş parçacığının değerini biliyorum.

Ben CachedThreadPool büyük (Integer.MAX_VALUE) iplik oluşturma davranıştan kaçınmak için, FixedThreadPool(maxValue) ile CachedThreadPool değiştirsin mi?

Her birinin artıları ve eksileri öner.

+0

Ne "* büyük iş parçacığı oluşturma davranışı *" ile ilgili olarak bahsediyorsunuz? Önbelleğe alınmış bir iş parçacığı havuzunun mevcut olmaması durumunda yeni bir iş parçacığı oluşturacağı gerçeği mi? Eğer öyleyse, daha iyi soru şu şekildedir: “Tüm iş parçacıkları erişilemezken başka bir görev göndermek için böyle bir işlem yapmam durumunda iş parçacığı engellenmiş olur muyuz? * Önbelleğe alınmış bir iş parçacığı havuzunun belirli bir süre sonra iş parçacıklarını yok edeceğini unutmayın. . Max sayısını biliyor olsanız da ortalama sayı nedir? Maksimum sayım 10, ancak ortalama 4 ise, 10 iş parçacığını canlı tutmak çok mantıklı olmaz. –

+0

büyük iş parçacığı oluşturma davranışı - Birisi çok fazla istek gönderirse, cachedThreadPool Integer.MAX_VALUE tane oluşturmamalıdır. – MIK

+0

Daha fazla iyi yanıtlar bul @ https://stackoverflow.com/questions/17957382/fixedthreadpool-vs-cachedthreadpool-the-lesser- ve iki-kötülüklerdir / –

cevap

4

Önbelleğe alınmış bir iş parçacığı havuzu ile Java'daki sabit bir iş parçacığı havuzu arasındaki en önemli fark, önbelleğe alınmış iş parçacığı havuzunun, oluşturulacak iş parçacığı sayısı ve kullanımı için üst sınırı yoktur. Hangisi tercih edilirse, ölçeklendirme davranışının nasıl olmasını istediğinize bağlıdır.

Önbelleğe alınmış iş parçacığı havuzunun ana avantajı, yürütülmesi beklenmeyen çok sayıda göreviniz olsa bile iş parçacıklarının hemen yürütmeye başlayacağıdır. Örneğin, işletme ihtiyaçlarınız aylar veya yıllar içinde artabilir ve uygulamanız daha güçlü makinelere taşınabilir ve önbelleğe alınmış bir iş parçacığı havuzunun kullanılması, kodun değiştirilmesine gerek kalmadan artan kullanılabilir işlem gücünü kullanarak artan ihtiyaçların karşılanmasına izin verir. . Bu, uygulamanın aylar veya yıllar boyunca hizmete girmesinden sonra, kullanıcıların performansı artırmak için değiştirilebilecek bir parametre olarak iş parçacığı sınırını kolayca tanımlayabilecek kadar kodun kolayca hatırlayamayacağı bir avantaj olabilir.

Sabit iplik havuzunun ana avantajı, iplik sayısının daha sıkı kontrol edilmesidir. Bu, yazılım uygulamasının diğer bölümlerinin - uygulama içinde veya diğer uygulamalarda - bu uygulamanın kısa bir sürede çok sayıda görevi alması durumunda işleme gücünün açılmasından korunmasına yardımcı olur. Ek olarak, işletim sistemi iş parçacığı sınırına girme riski azalır ve bir işlemin bir iş parçacığı oluşturması ve bunu gerçekleştirememesi durumunda ortaya çıkabilecek yazılım çökme risklerini azaltır.