Por qué Windows 10 tiene tantos procesos de host de servicio?

Aunque Windows 10 tiene más servicios que las versiones anteriores de Windows, la gran razón del gran número de procesos de host de servicio que se ven en el Administrador de tareas es la arquitectura.

Cuando Windows quiere que la CPU deje de ejecutar un proceso y comience a ejecutar otro, requiere un «cambio de contexto». Y en una CPU tradicional de un solo núcleo, un cambio de contexto es computacionalmente caro. Hay que guardar el estado del proceso que se está ejecutando y cargar el estado del nuevo proceso. Lo que significa que una «llamada entre procesos» -cuando el proceso A necesita pedirle al proceso B que haga algo- también es costosa desde el punto de vista computacional, porque requiere dos cambios de contexto, del proceso A al proceso B y luego de vuelta al proceso A. Si varios procesos dependen mucho unos de otros (y por lo tanto necesitan llamarse con frecuencia), todos los cambios de contexto se convierten en una gran pérdida de rendimiento del sistema.

Este problema de rendimiento es la razón por la que Windows fue diseñado para permitir «servicios compartidos». Varios servicios pueden ejecutarse en un solo proceso. Cuando un servicio necesita llamar a otro servicio en el mismo proceso, es mucho menos costoso computacionalmente que un cambio de contexto completo. Así que si tienes un grupo de servicios que se llaman frecuentemente entre sí, tiene sentido agrupar esos servicios en un único proceso de servicio.

¿Por qué no lanzar todos los servicios -o al menos «todos los servicios que necesitan ejecutarse en un nivel de privilegio determinado»- en un glorioso megaservicio? Porque la mejora del rendimiento de un proceso de servicio compartido tiene un coste de fiabilidad. Si cualquier servicio de un proceso de servicios compartidos se bloquea por cualquier motivo, todo el proceso de servicios compartidos tiene que cerrarse. Por lo tanto, si se toman diez servicios igualmente fiables y se juntan en un proceso de servicio compartido, cada uno de los diez servicios tiene diez veces más probabilidades de fallar (ya que un fallo en cualquiera de ellos también hace fallar a los otros nueve).

Con el tiempo, las CPU se rediseñaron para ser cada vez más eficientes en el cambio de contexto. (Por ejemplo, el «hyperthreading» de Intel es básicamente una forma mejor de cambiar entre dos procesos que se ejecutan en una sola CPU). Luego llegaron las CPUs de varios núcleos, y los cambios de contexto se abarataron aún más. Y el aumento de la potencia bruta de las CPU hizo que muchos sistemas pasaran la mayor parte de su tiempo de CPU en reposo. Las ventajas de rendimiento de la combinación de servicios en procesos compartidos se volvieron cada vez menos importantes con el tiempo, mientras que la penalización de la fiabilidad seguía siendo la misma.

Así que en Windows 10, muchos de los servicios que solían vivir en procesos de servicio compartidos se separaron en cambio en procesos individuales, o al menos en grupos mucho más pequeños. El número de procesos de servicio aumentó, pero la fiabilidad también lo hizo.