2012-11-05 12 views
15

Próbuję podać wzór reaktora (współbieżny), ale w wielu przykładach mówi się o "wątkach roboczych". Co to są wątki robocze? Czym różnią się od "normalnych" nici? Jaka jest ich rola w strukturze reaktora?Co to są wątki robocze i jaka jest ich rola w strukturze reaktora?

+3

Proszę podać linki do odnośników, o których mowa. – Gray

+0

http://en.wikipedia.org/wiki/Reactor_pattern – Jon

+0

Nie widzę nic na temat "wątków roboczych" na tej stronie @ Jon. – Gray

Odpowiedz

25

Urządzenie Reactor pattern jest używane z wątkami roboczymi w celu rozwiązania typowego scenariusza w aplikacjach: W końcu trzeba wykonać dużo pracy, ale nie wiadomo, która praca i kiedy oraz tworzenie wątków jest kosztowną operacją.

Chodzi o to, że tworzysz wiele wątków, które na początku nic nie zdziałają. Zamiast tego "czekają na pracę". Kiedy nadejdzie praca (w formie kodu), pewien rodzaj usługi executora (reaktor) identyfikuje bezczynne wątki z puli i przydziela im pracę do wykonania.

W ten sposób można zapłacić cenę za utworzenie wszystkich wątków tylko raz (a nie za każdym razem, gdy trzeba wykonać jakąś pracę). W tym samym czasie twoje wątki są ogólne; będą wykonywać każdą pracę, która jest im przypisana, zamiast być wyspecjalizowanym w wykonywaniu czegoś konkretnego. Aby uzyskać implementację, spójrz na numer thread pools.

+2

Dobra odpowiedź. Nie wiedziałem o schemacie reaktora. –

+0

Świetne wyjaśnienie, to naprawdę pomocne. – Jon

14

Zakładam, że mówimy o czymś like this documentation on thread-pools:

Większość wdrożeń executorów w użyciu java.util.concurrent basenów nici, które składają się z robotnic wątków. Ten rodzaj wątku istnieje niezależnie od zadań wykonywanych i możliwych do wywołania, które wykonuje i jest często używany do wykonywania wielu zadań.

wątków roboczych są normalnymi wątków ale istnieją one oddzielone od Runnable lub Callable klas, które pracują dalej. Jeśli przedłużysz Thread lub skonstruujesz Thread z argumentem Runnable, zadanie jest bezpośrednio związane z obiektem Thread.

Podczas tworzenia nitki basen korzystając Executors.newFixedThreadPool(10); (lub inne podobne metody), należy utworzyć pulę 10 wątków, które można uruchomić dowolną liczbę różnych Runnable lub Callable klas, które zostały złożone do puli. Pod osłonami są one jeszcze bardziej elastyczne ze względu na sposób ich owijania.

Pod względem reactor pattern różne typy zdarzeń są uruchamiane przez wątki procedury obsługi, które są podobne. Wątek nie jest powiązany z pojedynczą klasą zdarzenia, ale uruchamia dowolną liczbę różnych zdarzeń w momencie ich wystąpienia.

+0

Dzięki za wyjaśnienie, to naprawdę wyjaśniło to. Czy istnieje różnica między interfejsami Runnable i Callable? – Jon

+4

Spójrz na Javadocs @Jon. 'Runnable' ma metodę' void run() 'while' Callable 'ma metodę' T call() '. Metody 'Callable' umożliwiają zwracanie wartości z zadania, które przesyłasz do puli pracowników. – Gray