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?
Odpowiedz
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.
Dobra odpowiedź. Nie wiedziałem o schemacie reaktora. –
Świetne wyjaśnienie, to naprawdę pomocne. – Jon
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.
Dzięki za wyjaśnienie, to naprawdę wyjaśniło to. Czy istnieje różnica między interfejsami Runnable i Callable? – Jon
Spójrz na Javadocs @Jon. 'Runnable' ma metodę' void run() 'while' Callable
Proszę podać linki do odnośników, o których mowa. – Gray
http://en.wikipedia.org/wiki/Reactor_pattern – Jon
Nie widzę nic na temat "wątków roboczych" na tej stronie @ Jon. – Gray