2010-07-07 10 views

Odpowiedz

4

Biorąc pod uwagę koszt, jedyną poprawną odpowiedzią jest przetestowanie go dla siebie (nie tak elegancki sposób, aby powiedzieć, że nigdy nie wykonałem takiego testu, i nigdy tego nie zrobię, ponieważ nowoczesny mechanizm wykonywania zapewnia daleko zaawansowane tworzenie/mechanizmy niszczenia).

Po przeanalizowaniu istniejących implementacji nowoczesne wersje Java (począwszy od wersji Java 5) oferują różne podklasy: ThreadPoolExecutor, które łączą zalety puli wątków z najnowocześniejszymi koncepcjami java.util.concurrent: Executors.

Poza tym, nigdy nie poleciłbym Ci wystarczająco, abyś zapomniał o wątkach i ich repalce z Runnable, Callable i innych bardziej zaawansowanych obiektów obliczeniowych. W ten sposób możesz łatwo zmienić implementację Executorów.

+0

Statyczna klasa narzędziowa Executors oferuje utworzenie instancji ThreadPoolExecutor, która jest konfigurowana w oparciu o wybraną metodę. –

5

Powinieneś zawsze używać puli wątków. Nie tylko dla wydajności, ale dla łatwości użycia daje ci pakiet java.util.concurrent. W środowisku Java 5 i nowszym wbudowane jest buforowanie wątków.

Zamiast myśleć w kategoriach "wątków", należy użyć interfejsu Executor, aby wykonać zadania, które należy wykonać. Tworzenie nowej puli wątków jest tak proste, jak:

Executor executor = Executors.newFixedThreadPool(5); 

Pełna dokumentacja na opakowaniu java.util.concurrent jest tutaj: http://java.sun.com/javase/6/docs/api/java/util/concurrent/package-frame.html

0

Tworzenie wątków jest zawsze kosztowne, niezależnie od platformy. Rzeczywisty czas na utworzenie wątku zależy od systemu operacyjnego.

Zalecam użycie puli wątków, jeśli bardzo często tworzysz wątki o krótkim czasie trwania. Na przykład, jeśli głównym zadaniem aplikacji jest obsługa tak krótkotrwałych zadań, pula wątków byłaby bardzo przyjemna.

Pula wątków jest również dobra, jeśli tworzy się zbyt wiele wątków. Przełączanie kontekstowe między wątkami może również spowodować utratę wydajności. Krótko mówiąc, na współczesnej czterordzeniowej architekturze komputerów PC powinno się dążyć do tego, aby nie więcej niż 200 wątków działało jednocześnie.

+2

Ktoś zmierzył to, odpowiadając na pytanie tutaj: http://stackoverflow.com/questions/2117072/java-thread-creation-overhead Stworzył 10.000 wątków na sekundę, więc nie jest to zbyt drogie. –

+0

Tworzenie wątków może być ok, ponieważ w Javie myślę, że rzeczywiste wątki są tworzone tylko wtedy, gdy zaczyna się metoda wątku. Jednak 10 000 wątków jest zabójcą wydajności ze względu na przełączanie kontekstów. – Nick

Powiązane problemy