La prioridad solo importa cuando hay más subprocesos ejecutables que los núcleos de CPU disponibles. Cuando eso sucede, la prioridad controla qué hilos se ejecutan. En la mayoría de los sistemas, no hay suficiente cómputo para ninguna disputa en la CPU: todos los hilos están bloqueados , esperando que algo suceda. Eso podría estar esperando que escriba algo, mueva el mouse, toque la pantalla o que lleguen datos del disco, la red, algún otro dispositivo que haya conectado o que otro hilo termine de trabajar en datos críticos estructura. Podría estar esperando que parte del programa sea leída desde el disco o alguna memoria que fue intercambiada para ser leída, en lugar de leer explícitamente un archivo.
En Windows, el planificador mantiene una cola de subprocesos ejecutables en cada nivel de prioridad. Cuando toma una decisión de programación, ya sea que un subproceso ha agotado su cantidad (tiempo permitido antes de que algo más necesite ejecutarse), lo que significa que otro subproceso debería tener un turno, o el subproceso se ha bloqueado y ya no es ejecutable, o una prioridad más alta el subproceso se ha desbloqueado: se programará el siguiente subproceso de la cola en el nivel de máxima prioridad con cualquier subproceso ejecutable. Si el hilo que se estaba ejecutando ha agotado su cantidad, se coloca al final de la cola. Si es el único subproceso en su nivel de prioridad que se puede ejecutar, y no hay otros subprocesos ejecutables de mayor prioridad, pero que no se ejecutan, tendrá otro turno.
En sistemas multinúcleo / multiprocesador, puede haber restricciones sobre qué núcleos puede ejecutar un subproceso. Además, el sistema intenta mantener los subprocesos en su núcleo ideal y dentro de su nodo NUMA para que los datos del subproceso todavía estén probablemente en la memoria caché de ese núcleo y tenga acceso rápido a los datos que creó. Los subprocesos aún se ejecutarán en núcleos no ideales si no hay elección de qué ejecutar a continuación.
El sistema utiliza varios aumentos de prioridad dinámica y tamaños cuánticos dinámicos para que la aplicación en primer plano tenga más tiempo (si lo necesita) que los procesos en segundo plano, y para que los procesos puedan reaccionar rápidamente cuando se completen las operaciones de E / S (incluyendo mouse, teclado y entrada de pantalla táctil). Además, el aumento de prioridad se utiliza para evitar las inversiones prioritarias, donde un subproceso de alta prioridad está esperando un recurso que actualmente tiene un subproceso de baja prioridad. Si también se está ejecutando un subproceso de prioridad media, privará al subproceso de baja prioridad del tiempo de procesador, reteniendo el subproceso de alta prioridad. Por lo tanto, el subproceso de baja prioridad se aumenta temporalmente a la prioridad más alta, por lo que obtiene tiempo y, con suerte, libera el recurso que necesita el subproceso de alta prioridad.
Antes de Windows Vista, la prioridad del hilo no tenía efecto sobre la rapidez con que se completaban las operaciones de E / S. Desde Windows Vista, las E / S también pueden tener una prioridad, que de forma predeterminada proviene de la prioridad del subproceso.
Resumen: en gran medida no verá ningún efecto al cambiar las prioridades de los subprocesos a menos que su CPU esté muy cargada, e incluso entonces el efecto generalmente será mínimo. Si el proceso tiene que esperar E / S o no está compitiendo con otros procesos por el tiempo de CPU, ya se está ejecutando lo más rápido que puede y cambiar la prioridad no lo hará más rápido.