Java Thread Pool
Vocabulaire
- thread : processus léger géré par l’OS
- executor service : une implémentation de thread pool
- future : unité d’exécution dont le résultat n’est peut être pas encore calculé
Généralités
En une phrase : Une thread pool contrôle un groupe de threads
Traduction : Groupe de processus légers partagés
Une thread pool est un design pattern utilisé dans des applications concurrentes. Un thread Java = un thread de l’OS. Trop de threads saturent une machine. La thread pool déporte cette complexité accidentelle de l’application.
Architecture
Le nombre de threads est limité.
L’appelant entasse ses tâche sur une file d’exécution (task queue).
Quand un thread est libre, il prend une tâche sur la file d’exécution et l’exécute.
Taxonomie
Différents paramètres définissent le type de threadpool
- le nombre de threads toujours disponibles
- la capacité à planifier (schedule) l’exécution d’une tâche, dans un moment ou à intervalle régulier.
Généralement en java, on utilise un ExecutorService, qui implémente la logique de la thread pool. Il propose une fonction pour exécuter une tâche1 retournant un Future
Les ExecutorService les plus communs sont :
nom | nb threads | éviction | planification |
---|---|---|---|
Single | nb = 1 | non | non |
Fixed | nb = $N | non | non |
Cached | $N < nb < MAX | > 60s d’inactivité | non |
Single Scheduled | nb = 1 | non | oui |
Scheduled | $N < nb < MAX | oui | oui |
Il est possible de personnaliser la thread pool2.