Perché Windows 10 ha così tanti processi service host?

Anche se Windows 10 ha più servizi rispetto alle versioni precedenti di Windows, la grande ragione per il gran numero di processi service host che vedete in Task Manager è architettonica.

Quando Windows vuole che la CPU smetta di eseguire un processo e ne inizi un altro, richiede un "context switch". E sulle tradizionali CPU single-core, un cambio di contesto è computazionalmente costoso. Lo stato del processo in corso deve essere salvato, e lo stato del nuovo processo deve essere caricato. Il che significa che una "chiamata tra processi" - quando il processo A ha bisogno di chiedere al processo B di fare qualcosa - è anch'essa computazionalmente costosa, perché richiede due cambi di contesto, dal processo A al processo B e poi di nuovo al processo A. Se più processi dipendono molto l'uno dall'altro (e quindi hanno spesso bisogno di chiamarsi a vicenda), tutti i cambi di contesto diventano un grande scarico sulle prestazioni del sistema.

Questo problema di prestazioni è il motivo per cui Windows è stato progettato per consentire "servizi condivisi". Più servizi possono essere eseguiti in un singolo processo. Quando un servizio ha bisogno di chiamare un altro servizio nello stesso processo, è molto meno costoso dal punto di vista computazionale di un vero e proprio cambio di contesto. Quindi se si ha un gruppo di servizi che si chiamano frequentemente l'un l'altro, ha senso raggruppare quei servizi in un singolo processo di servizio.

Perché non gettare ogni servizio - o almeno "tutti i servizi che hanno bisogno di essere eseguiti ad un dato livello di privilegi" - in un glorioso megaservizio? Perché il miglioramento delle prestazioni di un processo di servizio condiviso ha un costo in termini di affidabilità. Se un qualsiasi servizio in un processo di servizio condiviso si blocca per qualsiasi motivo, l'intero processo di servizio condiviso deve chiudersi. Quindi se prendete dieci servizi ugualmente affidabili e li mettete insieme in un processo di servizio condiviso, tutti e dieci i servizi hanno dieci volte più probabilità di andare in crash (dato che un crash in uno qualsiasi di essi manda in crash anche gli altri nove).

Con il tempo, le CPU sono state riprogettate per diventare sempre più efficienti nel context-switching. (Per esempio, l'"hyperthreading" di Intel è fondamentalmente un modo migliore di passare avanti e indietro tra due processi in esecuzione su una singola CPU). Poi sono arrivate le CPU multi-core, e gli switch di contesto sono diventati ancora più economici. E l'aumento della potenza grezza delle CPU significava che molti sistemi passavano la maggior parte del loro tempo di CPU al minimo. I vantaggi in termini di prestazioni di combinare i servizi in processi condivisi sono diventati sempre meno importanti nel tempo, mentre la penalizzazione dell'affidabilità è rimasta la stessa.

Così in Windows 10, un sacco di servizi che vivevano in processi di servizio condivisi sono stati invece separati in processi individuali - o almeno in gruppi molto più piccoli. Il numero di processi di servizio è aumentato, ma anche l'affidabilità è aumentata.