-
thread framwork Executor
Bonjour,
je suis en train de me plonger dans le framwork Executor et j'ai deux questions :
Lorsque l'on utilise un newFixedThreadPool comment fait-on pour déterminer le nombre de thread par pool ? faut-il tenir compte du nombre de cœur du processeur (et comment)?
Dans quels cas est-il pertinent d'utiliser un newFixedThreadPool.
Merci de vos réposnes.
-
Salut,
newFixedThreadPool(n) ne créé qu'un seul pool, dont le nombre de threads est fixé par le paramètre n. Tu ne peux pas contrôler la répartition entre processeurs : tu soumets juste des tâches, et le pool se charge de les répartir sur les threads disponibles (la jvm et l'os se chargera de la répartition entre CPU). Ce type de pool permet d'exécuter des tâches et d'utiliser justement plusieurs threads, dans une limite fixée. Avec newSingleThreadPool, toutes les tâches s'exécutent les unes après les autres, donc le temps total d'exécutions sera toujours la somme des temps d'exécution de chaque tâche (au temps de "gestion" près). Avec un newCachedThreadPool(), le nombre de threads n'est pas limité, donc le temps maxi sera le temps de la tâche la plus longue : ce type de pool est toutefois plutôt adapté pour des tâches courtes, sinon le nombre de threads risque de devenir important et plomber la machine. Le "fixedthread" est un compromis : on attend pas le temps maximum d'exécution successives des tâches, mais en cas de tâches nombreuses et longues, on plombe pas la machine avec un nombre exagéré de threads simultanés.
Voir également.
-
Et pour répondre à la question, le nombre de threads que tu mettra dans ton pool dépends du nombre de coeurs / CPU, du nombre de CPU, de l'aspect des tâches (plutot CPU, plutot disque, plutot réseau) et de si tu veux ou non saturer la machine :)