Pour éviter de devoir associer un processus de gestion à chaque unité d'exécution du gestionnaire de travaux soumis, ce dernier maintient un "Pool" de processus de taille configurable.
Lorsqu'une unité d'exécution doit exécuter un travail en mode DLL, elle demande au Pool un processus de gestion pour la DLL. Le Pool lui rend un processus libre s'il en existe, ou en crée un le cas échéant. A un instant donné, il peut exister plus de processus hôtes que de processus configurés pour le Pool si cela est nécessaire au traitement.
A la fin de l'exécution du travail, l'unité d'exécution restitue le processus hôte au Pool. Celui-ci stocke le processus pour usage ultérieur s'il n'est pas plein, ou termine le processus si le nombre maximum de processus est atteint.
Le processus hôte conserve en mémoire la dernière DLL exécutée pour accélérer encore le chargement. Le Pool est également informé de la DLL en utilisation dans un processus hôte particulier, ce qui lui permet de sélectionner le processus approprié à l'exécution.
Le gestionnaire de travaux est capable de détecter les anomalies de fonctionnement d'un processus hôte (arrêt anormal du processus). De plus, il est possible de terminer l'exécution d'un travail de type DLL de la même manière qu'il est possible de terminer un EXE (le gestionnaire de travaux soumis terminant le processus hôte correspondant).
Précisions :
Les processus du Pool ne sont pas pré-alloués, ils sont créés en fonction des besoins, et conservés en respectant les paramètres de gestion du Pool spécifiés.
La gestion du Pool est automatique, aucune interface de configuration n'est disponible, il est néanmoins possible de le configurer en ajoutant deux paramètres dans le fichier .ini (non recommandé) :
- PoolSizeMin est la taille minimale du Pool (par défaut nombre de files du gestionnaire de travaux soumis).
Si à un instant donné on exécute DLL2.DLL et qu'aucun processus du Pool ne l'a déjà préchargée, deux cas se présentent :
- la taille minimale du Pool n'est pas atteinte et l'on crée un nouveau processus ;
- la taille minimale du Pool est atteinte. Dans ce cas on réutilise un processus existant, et on lui fait décharger sa DLL.
- Si la DLL est déjà préchargée dans un processus du Pool, indépendamment de la valeur de PoolSizeMin, on réutilise ce processus pour l'exécution.
- PoolSizeMax est le nombre maximum de processus à garder en réserve (par défaut non borné : somme de 1 à n du parallélisme des files d'attente).
Si à un instant donné on a besoin de plus de processus que ce maximum, il seront alloués, mais seul PoolSizeMax processus seront conservés en réserve.