Que sont les threads de travail et quel est leur rôle dans le modèle de réacteur?


J'essaie d'undertand le modèle de réacteur (concurrent), mais dans de nombreux exemples, ils parlent de "threads de travail". Que sont les threads de travail? En quoi diffèrent-ils des threads "normaux"? Et quel est leur rôle dans le modèle du réacteur?

Author: Jon, 2012-11-05

2 answers

Le Modèle de réacteur est utilisé avec les threads de travail pour surmonter un scénario commun dans les applications: Vous devez faire beaucoup de travail par la suite, mais vous ne savez pas quel travail et quand et la création de threads est une opération coûteuse.

L'idée est que vous créez beaucoup de threads qui ne font rien au début. Au lieu de cela, ils "attendent le travail". Lorsque le travail arrive (sous forme de code), une sorte de service d'exécuteur (le réacteur) identifie les threads inactifs du pool et attribue leur travail à faire.

De cette façon, vous pouvez payer le prix pour créer tous les threads une fois (et pas à chaque fois qu'un travail doit être fait). En même temps, vos threads sont génériques; ils feront tout le travail qui leur est assigné au lieu d'être spécialisés pour faire quelque chose de spécifique.

Pour une implémentation, regardez pools de threads.

 29
Author: Aaron Digulla, 2012-11-05 15:41:46

Je suppose que vous parlez de quelque chose comme cette documentation sur le fil-piscines:

La plupart des implémentations d'exécuteurs en java.util.l'utilisation simultanée des pools de threads, qui se composent de threads. Ce type de thread existe séparément des tâches exécutables et appelables qu'il exécute et est souvent utilisé pour exécuter plusieurs tâches.

Les threads de travail sont des threads normaux mais ils existent séparément des classes Runnable ou Callable qui ils travaillent sur. Si vous étendez Thread ou si vous construisez un Thread avec un argument Runnable, la tâche est directement liée à l'objet Thread.

Lorsque vous créez un pool de threads à l'aide de Executors.newFixedThreadPool(10); (ou d'autres méthodes similaires), vous créez un pool de 10 threads pouvant exécuter n'importe quel nombre de classes Runnable ou Callable différentes qui sont soumises au pool. Sous les couvertures, ils sont toujours un Thread juste plus flexible en raison de la façon dont ils sont enveloppés.

En termes de modèle de réacteur , différents types d'événements sont exécutés par les threads du gestionnaire, ce qui est similaire. Un thread n'est pas lié à une seule classe d'événements mais exécutera un nombre quelconque d'événements différents au fur et à mesure qu'ils se produisent.

 18
Author: Gray, 2016-10-10 16:34:51