Pourquoi Windows 10 a-t-il un si grand nombre de processus hôtes de service ?


Bien que Windows 10 ait effectivement plus de services que les versions précédentes de Windows, la grande raison du grand nombre de processus hôtes de service que vous voyez dans le gestionnaire de tâches est architecturale.

Lorsque Windows veut que le CPU arrête d'exécuter un processus et commence à en exécuter un autre, il nécessite un "changement de contexte". Et sur un processeur traditionnel à un seul cœur, un changement de contexte est coûteux en termes de calcul. L'état du processus en cours d'exécution doit être sauvegardé, et l'état du nouveau processus doit être chargé. Ce qui signifie qu'un "appel inter-processus" - lorsque le processus A a besoin de demander au processus B de faire quelque chose - est également coûteux en calcul, car il nécessite deux commutations de contexte, du processus A au processus B, puis de nouveau au processus A. Si plusieurs processus dépendent beaucoup les uns des autres (et doivent donc fréquemment s'appeler les uns les autres), toutes les commutations de contexte sont devenues un gros drain pour les performances du système.


Ce problème de performance est la raison pour laquelle Windows a été architecturé pour permettre les "services partagés". Plusieurs services peuvent s'exécuter dans un seul processus. Quand un service a besoin d'appeler un autre service dans le même processus, c'est beaucoup moins coûteux en calcul qu'un changement de contexte à part entière. Donc, si vous avez un groupe de services qui s'appellent fréquemment les uns les autres, il était logique de regrouper ces services dans un seul processus de service.


Pourquoi ne pas jeter tous les services - ou du moins "tous les services qui doivent s'exécuter à un niveau de privilège donné" - dans un mégaservice glorieux ? Parce que l'amélioration des performances d'un processus de service partagé a un coût de fiabilité. Si l'un des services d'un processus de service partagé tombe en panne pour une raison quelconque, l'ensemble du processus de service partagé doit s'arrêter. Ainsi, si vous prenez dix services de fiabilité égale et que vous les réunissez dans un processus de service partagé, les dix services deviennent chacun dix fois plus susceptibles de se planter (puisqu'un plantage de l'un d'entre eux plante également les neuf autres).

Au fil du temps, les processeurs ont été repensés pour devenir de plus en plus efficaces en matière de changement de contexte. (Par exemple, l'"hyperthreading" d'Intel est essentiellement un meilleur moyen de basculer entre deux processus exécutés sur un seul CPU). Ensuite, les processeurs à cœurs multiples sont apparus, et les commutations de contexte sont devenues encore plus économiques. Et l'augmentation de la puissance brute des CPU signifiait que de nombreux systèmes passaient la majeure partie de leur temps CPU à tourner au ralenti. Les avantages en termes de performances de la combinaison de services dans des processus partagés sont devenus de moins en moins importants au fil du temps, tandis que la pénalité de fiabilité est restée la même.

Donc, dans Windows 10, beaucoup de services qui vivaient dans des processus de services partagés ont été au contraire séparés en processus individuels - ou du moins en groupes beaucoup plus petits. Le nombre de processus de service a augmenté, mais la fiabilité a également augmenté.

.