2012-11-05 13 views
15

Sto provando a sottostimare il pattern Reactor (concomitante), ma in molti esempi si tratta di "thread worker". Cosa sono i thread di lavoro? In cosa differiscono dai thread "normali"? E qual è il loro ruolo nel modello del reattore?Cosa sono i thread di lavoro e qual è il loro ruolo nel pattern del reattore?

+3

Fornire collegamenti ai riferimenti di cui si sta parlando. – Gray

+0

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

+0

Non vedo nulla su "thread worker" su quel sito @Jon. – Gray

risposta

25

Il Reactor pattern viene utilizzato con i thread di lavoro per superare uno scenario comune nelle applicazioni: è necessario eseguire molto lavoro alla fine, ma non si sa quale lavoro e quando e la creazione di thread è un'operazione costosa.

L'idea è che si creano molti thread che non fanno nulla all'inizio. Invece, "aspettano il lavoro". Quando il lavoro arriva (sotto forma di codice), un qualche tipo di servizio dell'esecutore (il reattore) identifica i thread inattivi dal pool e gli assegna loro il lavoro da fare.

In questo modo, è possibile pagare il prezzo per creare tutte le discussioni una volta (e non tutte le volte che è necessario qualche lavoro). Allo stesso tempo, i tuoi thread sono generici; faranno tutto il lavoro che viene loro assegnato invece di essere specializzati nel fare qualcosa di specifico.

Per un'implementazione, consultare thread pools.

+2

Bella risposta. Non ero a conoscenza del pattern Reactor. –

+0

Ottima spiegazione, questo è veramente utile. – Jon

14

presumo si sta parlando di qualcosa like this documentation on thread-pools:

La maggior parte delle implementazioni esecutori in pool di thread uso java.util.concurrent, che consistono di thread di lavoro. Questo tipo di thread esiste separatamente dalle attività Runnable e Callable eseguite ed è spesso utilizzato per eseguire più attività.

thread di lavoro sono fili normali ma esistono separate dalle Runnable o Callable classi che lavorano su. Se si estende Thread o si costruisce un Thread con un argomento Runnable, l'attività è legata direttamente all'oggetto Thread.

Quando si crea un thread-pool utilizzando Executors.newFixedThreadPool(10); (o altri metodi simili), si crea un pool di 10 thread che può eseguire qualsiasi numero di differenti Runnable o Callable classi che vengono sottoposti alla piscina. Sotto le coperte sono ancora un Thread semplicemente più flessibili a causa del modo in cui sono avvolti.

In termini di reactor pattern, diversi tipi di eventi vengono eseguiti dai thread del gestore che è simile. Un thread non è legato a una singola classe di eventi ma eseguirà un numero qualsiasi di eventi diversi non appena si verificano.

+0

Grazie per la spiegazione, questo lo ha davvero chiarito. C'è una differenza tra le interfacce Runnable e Callable? – Jon

+4

Dai un'occhiata a Javadocs @Jon. 'Runnable' ha un metodo' void run() 'mentre 'Callable ' ha un metodo 'T call()'. I metodi 'Callable' consentono di restituire un valore dal lavoro inviato al pool di worker. – Gray