2015-09-25 20 views
8

Przeprowadziłem test obciążenia na mojej aplikacji, aby znaleźć maksymalną liczbę wątków potrzebnych do obsługi planowanego obciążenia.Java CachedThreadPool vs FixedThreadPool

Użyłem ExecutorServiceCachedThreadPool, aby wątki były tworzone dynamicznie na podstawie obciążenia. Teraz znam wartość maksymalnej liczby wątków przy użyciu getLargestPoolSize().

należy wymienić CachedThreadPool z FixedThreadPool(maxValue), aby uniknąć dużego zachowanie tworzenia (Integer.MAX_VALUE) gwintu CachedThreadPool?

Zaproponuj za i przeciw każdego z nich.

+0

Co masz na myśli "zachowanie * dużej kreacji wątku *"? Czy masz na myśli fakt, że buforowana pula wątków utworzy nowy wątek, jeśli nie będzie dostępny? Jeśli tak, to lepszym pytaniem jest: "Czy mógłbym przeszkodzić w zablokowaniu moich wątków, jeśli tak się stanie, aby przesłać kolejne zadanie, podczas gdy wszystkie wątki robocze są nieosiągalne? *" Należy pamiętać, że buforowana pula wątków niszczy wątki po pewnym czasie. . Chociaż znasz maksymalną liczbę, jaka jest średnia liczba? Jeśli maksymalna liczba to 10, ale średnia to 4, nie ma sensu utrzymywanie 10 wątków przy życiu. –

+0

zachowanie przy tworzeniu dużych wątków - jeśli ktoś wysyła zbyt wiele żądań, cachedThreadPool nie powinien tworzyć wątków Integer.MAX_VALUE – MIK

+0

Znajdź więcej dobrych dobrych odpowiedzi @ https://stackoverflow.com/questions/17957382/fixedthreadpool-vs-cachedthreadpool-the-lesser- z-dwóch zła / –

Odpowiedz

4

Najważniejszą różnicą między buforowaną pulą wątków a ustaloną pulą wątków w Javie jest to, że buforowana pula wątków nie ma górnego limitu liczby wątków, które będzie odradzać i używać. Który z nich jest preferowany zależy od tego, jak chcesz wyglądać skalowanie.

Główną zaletą buforowanej puli wątków jest natychmiastowe rozpoczęcie wykonywania wątków nawet w przypadku nieprzewidzianej dużej liczby zadań do wykonania. Na przykład potrzeby Twojej firmy mogą wzrosnąć w ciągu miesięcy lub lat, a Twoja aplikacja może zostać przeniesiona na wydajniejsze maszyny, a użycie buforowanej puli wątków pozwoli na obsługę zwiększonych potrzeb dzięki wykorzystaniu zwiększonej dostępnej mocy obliczeniowej bez konieczności zmiany kodu . Może to być zaletą, ponieważ po tym, jak aplikacja jest używana przez miesiące lub lata, ludzie mogą nie pamiętać kodu wystarczająco dobrze, aby określić limit nici jako parametr, który można zmienić w celu poprawy wydajności.

Główną zaletą stałej puli wątków jest to, że liczba wątków jest ściślej kontrolowana. Pomaga to uniknąć sytuacji, w której inne części instalacji oprogramowania - w aplikacji lub w innych aplikacjach - zostaną pozbawione mocy obliczeniowej, jeśli aplikacja otrzyma dużą liczbę zadań w krótkim czasie. Ponadto zmniejsza się ryzyko przekroczenia limitu wątków systemu operacyjnego, zmniejszając ryzyko wypadków oprogramowania, które mogą wystąpić, gdy proces wymaga odrodzenia wątku i nie jest w stanie tego zrobić.