2011-11-24 2 views
3

Un ensemble de tâches (fonctionnalités variées) dans mon application doit être exécuté de manière asynchrone et peut être mis en pool.Détermination des configurations d'un ThreadPoolTaskExecutor

On dirait que le ThreadPoolTaskExecutor de Spring est ce que je peux utiliser pour obtenir un tel exécuteur à partir du framework lui-même (plutôt que de le créer moi-même). Cependant, je ne suis pas sûr de savoir comment je décide des meilleures configurations pour l'exécuteur, c'est-à-dire des paramètres tels que "taille maximale du pool", "capacité de la file d'attente" et ainsi de suite. Quelles sont les considérations au moment de prendre cette décision et quels sont les paramètres qui fonctionnent le mieux?

Répondre

3

Je recommande de lire le javadoc of ThreadPoolExecutor avec une grande attention, car le comportement d'un tel pool concernant la mise en file d'attente est important à comprendre si vous voulez éviter les problèmes. Le JDK a Executors, qui fournit des méthodes d'usine qui devraient vous donner des pools correctement configurés. Utilisez ces méthodes ou creusez dans leur code source pour comprendre quels paramètres (tailles, type de file d'attente, etc.) sont utilisés pour ces configurations.

+1

J'ai passé en revue les javadocs pertinents, mais ceux-ci n'expliquent que ce que ces configurations signifient. Ils ne disent pas QUAND et comment devraient-ils être utilisés/modifiés, et c'est ce que je cherche. – Saket

+0

Les paramètres dépendent du type de tâches que vous soumettez (IO-bound, CPU-bound), du but que vous voulez (latence minimale, utilisation maximale de l'UC?), Du nombre de processeurs, des autres threads de l'application, etc. Je vous conseille de lire la concurrence Java dans la pratique, qui a un chapitre entier sur ces considérations. –

Questions connexes