2010-07-20 11 views

Odpowiedz

34

puli wątków jest grupa wątków początkowo stworzony że czeka na pracy i wykonuje je. Chodzi o to, aby wątki zawsze istniały, tak abyśmy nie musieli płacić czasu na ich tworzenie za każdym razem. Są odpowiednie, gdy wiemy, że istnieje strumień zleceń do przetworzenia, nawet jeśli może zaistnieć chwila, w której nie ma pracy.

Oto ładny diagram z Wikipedia: alt text

+0

tutaj Zielone (kwadratowe) pola są nitkami? – UnKnown

+0

Tak, zielone pola są wątkami. –

+1

Czy możemy oszacować liczbę wątków wymaganych dla puli wątków? lub jest jakikolwiek limit wątków dla każdej puli wątków? – UnKnown

5

Thread Pools z tutoriali Java ma dobry przegląd:

Korzystanie wątków roboczych minimalizuje nakład pracy ze względu na tworzenie wątku. Obiekty wątków używają znacznej ilości pamięci, a w przypadku aplikacji wielkoskalowych alokowanie i zwalnianie wielu obiektów wątków powoduje znaczne obciążenie związane z zarządzaniem pamięcią.

3

Proste wyszukiwanie Google da wiele informacji dotyczących pul wątków Java i pul wątków w ogóle.

Oto kilka przydatnych linków:

+0

Dzięki za cynk. Mam nadzieję, że teraz jest to bardziej odpowiednia odpowiedź. – S73417H

+0

Nie ma za co, a już jest lepiej (usunięto poprzedni komentarz). Mimo to, proponuję przeczytać [Jak radzić sobie z pytaniami google?] (Http://meta.stackexchange.com/questions/8724/how-to-deal-with-google-questions), [Czy to źle zapytać google pytania do przeszukiwania w Stack Overflow] (http://meta.stackexchange.com/questions/33376/is-it-bad-to-ask-google-searchable-questions-on-stack-overflow) i [Czy warto zapytać pytania dotyczące Stack Overflow bez wcześniejszych badań?] (http://meta.stackexchange.com/questions/23386/is-it-appropriate-to-ask-questions-on-stack-overflow-without-prior-research). –

+0

Tak ... Przepraszamy za nieco żartobliwą odpowiedź. Jest wcześnie rano i kawa jeszcze się nie skopała. Dzięki za linki. – S73417H

4

Można zakładać wątki być rzeczywiste pracownicy i Baseny wątku będzie grupa pracowników. Możesz tworzyć wiele grup z różnych powodów, takich jak priorytet, cel itd. Tak więc, podczas gdy jedna pula może być przeznaczona do zadań ogólnych, takich jak harmonogramy w tle, emisja wiadomości e-mail itp., Może istnieć pula przetwarzania transakcji, aby jednocześnie przetwarzać wiele transakcji. W przypadku Usług Egzekucyjnych, jestem pewien, że nie chciałbyś opóźniać zadań transakcyjnych, które mają być zakończone po tym, jak inne niekrytyczne działania, takie jak nadawanie wiadomości e-mail z potwierdzeniem lub konserwacja bazy danych, nie zostały zakończone. Możesz segregować je w pule i utrzymywać je niezależnie. To bardzo uproszczona odpowiedź bez wchodzenia w techniczne żargony. Pozdrowienia, KT

5

Pule gwintów są przydatne tylko w sytuacji typu klient-serwer, w której liczba/wystąpienie żądań klienta nie może zostać określona/przewidziana.

W tym scenariuszu, tworząc nowy wątek każdym razem, gdy żądanie klienta jest wykonany ma dwa DIS-zalety:

1) Uruchom latencja dla tworzenia wątku: Utworzenie wątku wymaga trochę czasu, więc rzeczywista zlecenie nie rozpoczyna się zaraz po otrzymaniu zgłoszenia. Klient może zauważyć niewielkie opóźnienie.

Kryteria te są kluczowe w systemach interaktywnych, w których klient oczekuje natychmiastowego działania.

2) Niekontrolowane wykorzystanie zasobów systemowych: Wątki zużywają zasoby systemowe (pamięć itp.), Dlatego w systemie może zabraknąć zasobów na wypadek niespotykanego wcześniej przepływu żądań klientów.

Pule nitek rozwiązują powyższe problemy przez:
1) Tworzenie określonej liczby wątków podczas uruchamiania serwera zamiast tworzenia ich w czasie wykonywania.
2) Ograniczenie liczby wątków uruchomionych w danym momencie.

Uwaga: Powyższe dotyczy basenów gwintowanych o stałych rozmiarach.

+0

Który scenariusz masz na myśli przez "W tym scenariuszu ..."? –

+1

Scenariusz, w którym są klienci przesyłający żądania do programu serwera. Nie można przewidzieć czasu/liczby żądań klientów ... Mam nadzieję, że to pomaga. –

+0

@AvinashGanta jak oszacować wymagane wątki do utworzenia w pulach wątków? – UnKnown

1

Pula wątków to pula już utworzonych wątków roboczych gotowych do wykonania pracy. Tworzy je Thread i nimi zarządza. Zamiast tworzyć wątek i odrzucać je po wykonaniu zadania, pula wątków ponownie wykorzystuje wątki w postaci wątku roboczego.

Dlaczego?

Ponieważ tworzenie wątku jest procesem czasochłonnym i opóźnia przetwarzanie żądań. Ogranicza również liczbę klientów na podstawie liczby wątków na maszynę JVM, która jest oczywiście ograniczona.


Tworzenie stałego basen rozmiar gwintu używając Executor ramy -

Java 5 wprowadzono pełną funkcję wbudowaną w ramach puli wątków powszechnie znany jako Executor ramach.

Tworzenie puli wątków o ustalonym rozmiarze za pomocą środowiska Java 5 Executor jest dość łatwe ze względu na statyczne metody fabryczne udostępniane przez klasę Executors. Wszystko, co musisz zrobić, to zdefiniować swoje zadanie, które chcesz wykonywać jednocześnie, a następnie przesłać to zadanie do ExecutorService.

Z tego miejsca pula wątków zadba o to, jak wykonać to zadanie; może być wykonany przez dowolny wolny wątek roboczy.

public class ThreadPoolExample { 
    public static void main(String args[]) { 
     ExecutorService service = Executors.newFixedThreadPool(10); //create 10 worker threads in Thread Pool 
     for (int i =0; i<100; i++){ 
      service.submit(new Task(i)); //submit that to be done 
     } 
    } 
} 

final class Task implements Runnable { 
    private int taskId; 
    public Task(int id){ 
     this.taskId = id; 
    } 

    @Override 
    public void run() { 
     System.out.println("Task ID : " + this.taskId +" performed by " 
          + Thread.currentThread().getName()); 
    } 
} 

Output: 
Task ID : 0 performed by pool-1-thread-1 
Task ID : 3 performed by pool-1-thread-4 
Task ID : 2 performed by pool-1-thread-3 
Task ID : 1 performed by pool-1-thread-2 
Task ID : 5 performed by pool-1-thread-6 
Task ID : 4 performed by pool-1-thread-5 

*Output may vary from system to system