¿Cómo funcionan las prioridades en el administrador de tareas y cuándo debería / no configurar esto?

30

He estado estableciendo la prioridad de algunos procesos para ver qué sucede realmente, pero, adivina qué ... Nada; todo funciona de la misma manera ...

Encontré en Google que las prioridades no están realmente vinculadas con la velocidad de procesamiento, ¿es eso cierto? ¿Por qué no entonces? Si un proceso tiene la máxima prioridad, ¿no debería ir más rápido?

Pablito
fuente
44
Respuesta corta: When should I set [priorities in Task Manager]? casi nunca.
Dan Henderson
2
Otra cosa importante a entender es que hacer cumplir las prioridades reduce la cantidad total de trabajo que el sistema puede hacer. Es por eso que los sistemas operativos de escritorio comunes no son sistemas operativos en tiempo real. Y cuanto más los haga comportarse como sistemas operativos en tiempo real, menos eficientes serán. Las interrupciones, por ejemplo, apagan los cachés. El trabajo de menor prioridad todavía tiene que hacerse y aún compite por las E / S. Hacerlo de manera menos eficiente, en trozos más pequeños, no beneficia a nadie.
David Schwartz
No intentes pensar en tu computadora. No vas a ganar. Sabe manejar sus hilos mucho mejor que tú.
b1nary.atr0phy

Respuestas:

52

Suponga que tiene una tarjeta de "ir al comienzo de la línea" para la tienda de comestibles. Usted va a la tienda, llena su carrito, va a los mostradores de pago y encuentra que no hay nadie en la fila. ¿Tu tarjeta te ayuda a que te retiren más rápido? No

Las prioridades no afectan la velocidad de procesamiento, ya que un proceso de mayor prioridad no puede ejecutarse más rápido o incluso usar más tiempo de CPU ... no si es lo único que quiere usar la CPU.

Para hablar realmente de esto, necesitamos mencionar hilos. Los procesos no se "ejecutan" en Windows. Los hilos, que son parte de los procesos, son los que se ejecutan. (Aunque si un proceso tiene un solo hilo, la distinción es bastante difusa desde el exterior).

(Por cierto: la terminología de marketing mediante la cual una CPU tiene, por ejemplo, "cuatro núcleos y ocho hilos" es engañosa. Las CPU tienen núcleos, pero las CPU no tienen "hilos". Los hilos son partes de procesos. Un núcleo de CPU sin hyperthreading habilitado puede ejecutar un subproceso; con hyperthreading habilitado, un núcleo puede ejecutar dos subprocesos. Pero las CPU no "tienen" subprocesos).

Cada subproceso siempre está en uno de varios estados de programación. Los estados más comúnmente vistos son: Esperando (* nix llama a esto "bloqueado"; en ambos SO esto significa esperar E / S o similar, no usa tiempo de CPU y no quiere ninguno); Listo (quiere usar el tiempo de CPU pero no hay CPU disponibles en este momento); y corriendo . Solo los subprocesos en ejecución consumen tiempo de CPU; es decir, si un proceso no tiene subprocesos en ejecución, se verá que usa un% de tiempo de CPU en herramientas como el Administrador de tareas.

Un subproceso solo puede ejecutarse en un núcleo (o, si se habilita hyperthreading, "procesador lógico") a la vez, por lo que un proceso solo puede usar tantos núcleos de CPU (o LP) como subprocesos que quieran ejecutarse en este momento . (Se puede hacer la misma declaración del sistema en su conjunto).

La mayoría de los subprocesos en la mayoría de los sistemas pasan la mayor parte de su tiempo en el estado de espera. (Esta es la razón por la cual su proceso inactivo debería estar obteniendo más del 95% del tiempo de CPU cuando su sistema no está haciendo nada). Las excepciones serían los hilos "funcionales" de cosas como video o renderizado 3D, juegos, etc. Muy pocos hilos realmente podría usar el 100% de la CPU, porque generalmente tienen que trabajar en algunos datos de entrada que tienen que leer en alguna parte, y generalmente crean datos de salida que deben escribirse en alguna parte. Y pueden referirse a muchos datos diferentes en la memoria a lo largo del tiempo, lo que puede significar que tienen que esperar a que se resuelvan las fallas de página difíciles.

Pero los subprocesos que hacen algo como la representación de video o la representación de imágenes en 3D bien podrían pasar casi todo su tiempo "computando" en la CPU, y muy poco esperando E / S. Dichos subprocesos a menudo se denominan "vinculados al cálculo", lo que significa que su rendimiento general está limitado principalmente por la velocidad de la CPU.

La configuración que realice en el Administrador de tareas realmente establece la "prioridad base" para todos los hilos en el proceso. La prioridad real o "actual" del subproceso puede ser mayor (pero nunca menor que la base). Más sobre esto en un momento. Las decisiones de programación ("quién puede ejecutar y en qué CPU") siempre se toman utilizando la prioridad actual del hilo. La prioridad solo es significativa para los subprocesos listos y en ejecución (o para decirlo de otro modo, la prioridad no es significativa para los subprocesos en espera).

Windows usa un algoritmo de programación preventivo . Si solo un hilo en el sistema quiere usar el tiempo de CPU, entonces no importa en lo más mínimo cuál es su prioridad; Obtiene el 100% de la CPU. No es como si el programador "frenara" una parte de la capacidad de la CPU cuando se ejecuta un subproceso de baja prioridad, en caso de que surja algo de mayor prioridad.

Si dos hilos quieren usar una CPU, y tienen la misma prioridad, entonces se programan a través de lo que se denomina "división de tiempo" y, con el tiempo, cada uno obtiene aproximadamente el 50% del tiempo de la CPU. Mientras que si tienen diferentes prioridades, el hilo de mayor prioridad obtiene el 100% y el más bajo no obtiene nada .

(En la práctica, no obtendrá nada, ya que experimentará un "impulso de prioridad para evitar el hambre" periódico que puede darle algunas decenas de ms cada 4 o 5 segundos más o menos. Pero esto no es realmente una excepción a "prioridad más alta" gana ", porque se hace ajustando la prioridad del hilo muerto de hambre.)

Si tiene más de un núcleo de CPU, las cosas se vuelven más interesantes y las prioridades en general tienen menos efecto. Supongamos que tiene dos hilos que quieren ejecutarse. Y supongamos que tiene dos o más núcleos de CPU que no están haciendo nada más de igual o mayor prioridad que esos subprocesos. Luego, sus dos hilos obtendrán cada uno el 100% de un núcleo, independientemente de sus prioridades respectivas .

(Dos personas se presentan en el supermercado, y hay dos damas gratis. Uno de los clientes tiene una tarjeta de "ir al comienzo de la línea". No importa).

tl; versión dr (hasta ahora): las prioridades no se refieren a "quién obtiene qué proporción de tiempo de CPU", sino más bien "quién ejecuta primero".

Aquí no voy a entrar mucho en hyperthreading, excepto para decir que Windows trata a cada uno de los dos "procesadores lógicos" en un núcleo de la misma manera que trataría a un núcleo si HT estuviera apagado. es decir, se tratan como CPU "reales", con esta excepción: Windows intentará con todas sus fuerzas no utilizar más de un LP a la vez. es decir, normalmente no comienzas a ver los dos LP en un núcleo que se usa hasta que tienes más de hilos de número de núcleos que intentan ejecutarse al mismo tiempo. Esto se debe a que los dos "procesadores lógicos" no le brindan el doble de rendimiento que un solo núcleo no hiperprocesado.

Acerca de la "prioridad base": Windows ajustará ("aumentará" y "decaerá") la prioridad actual de los subprocesos en función de lo que han hecho recientemente. Los subprocesos que completaron recientemente las operaciones de E / S normalmente estarán una muesca o dos por encima de la base; Los subprocesos de la interfaz de usuario (subprocesos que ejecutan una ventana) a menudo serán considerablemente más altos; Los hilos enlazados a la CPU generalmente estarán en su base. El propósito de esto es mantener la capacidad de respuesta en la interfaz de usuario del programa y también hacer que las solicitudes de E / S fluyan a elementos como los discos.

Un programa (proceso) también puede cambiar la prioridad base de cada uno de sus subprocesos, dentro de un rango determinado por la prioridad del proceso (lo que configura en el Administrador de tareas). Pero la gran mayoría de los programas no molestan. (Más de ellos deberían).

Hay otras cosas pasando. Debido al aumento / disminución prioritario, y porque los sistemas de multiprocesamiento (ya sea multinúcleo, hiperhilo o ambos) son muy comunes en estos días, y porque siempre hay cosas ejecutándose en segundo plano en Windows (pero, esperamos, que no usen mucho tiempo de CPU), y debido a los efectos de la "afinidad" tanto dura como blanda, es difícil ejecutar casos de prueba y obtener los resultados exactos que se predecirían aquí. Pero esto debería darte una imagen correcta.

En conclusión...

Es razonable dejar la mayoría de las cosas en "Normal". Si no lo hace, puede terminar fácilmente matando de hambre algo que realmente le gustaría que funcionara (aunque no sepa que existe), como las funciones de descarga de caché de disco del sistema operativo. De hecho, muchos de los procesos del sistema operativo serán distintos a Normal, y deberían dejarse donde Windows los coloque.

Un caso razonable para usar el Administrador de tareas para jugar con las prioridades es si tiene alguna tarea de CPU (como video o renderizado 3D) y está ralentizando el uso del sistema mientras se está ejecutando. Lo correcto es, lo creas o no, reducir su prioridad en una muesca o dos. Felizmente usará todos los ciclos de la CPU que nada más quiere, pero se mantendrá fuera del camino de su uso interactivo del sistema. Puede llevar un poco más de tiempo hacer su trabajo, pero lo hará con una mínima interferencia en el uso interactivo de otros programas. Si no te gusta esa compensación, ¡no lo hagas! Pero configúrelo como una prioridad alta en un intento de "hacer que vaya más rápido" y puede colgar toda su interfaz de usuario hasta que termine.

Nunca establezca nada en la llamada clase de prioridad en tiempo real.

(Editar - este párrafo agregado) Ok, esa es una declaración extrema. ("Ninguna afirmación universal es verdadera, sin excepción de esta"). Al menos, no sin una consideración muy cuidadosa. Si su objetivo es hacer que algo funcione más rápido, probablemente no ayudará. Pero podría "bloquear" su sistema (requiere un reinicio, o en la mayoría de las máquinas modernas, requiere un ciclo de encendido). O haga que no responda tanto que bien podría estar bloqueado.

Nota: cualquier aplicación de reproductor de video debe estar habilitada en la función "Programación de clases multimedia" en Vista y versiones posteriores. Esto le dará automáticamente hasta el 80% de una CPU, calculada en intervalos relativamente cortos. Si no puede obtener una reproducción sin problemas con eso, algo está muy mal.

Para obtener más detalles, consulte los capítulos sobre subprocesos y programación en Windows Internals 6th Edition de Solomon, Russinovich e Ionescu.

Consulte también mi respuesta aquí para obtener información sobre cómo se establecen las prioridades del proceso y del hilo, y el significado de la columna "Prioridad" en el Administrador de tareas.

Jamie Hanrahan
fuente
1
Por cierto, mi respuesta a la siguiente pregunta relacionada está relacionada: superuser.com/questions/949030/…
Jamie Hanrahan
1
También por cierto: "Programación", "programador", etc., aquí se refieren a las rutinas del kernel de Windows que deciden qué subprocesos se ejecutan y en qué CPU deben ejecutarse. No a la "programación de tareas", que consiste en iniciar procesos en momentos particulares o en respuesta a varios desencadenantes.
Jamie Hanrahan
Me @JamieHanrahan bien movido aquí: superuser.com/questions/1380473/...
Julien__
5

La alteración de prioridades cambia la forma en que el sistema operativo asigna el tiempo de CPU a las aplicaciones en ejecución. Solo produce efectos notables si la utilización general de la CPU es alta.

Por ejemplo, codifica un video y mira un video diferente al mismo tiempo. Probablemente, la aplicación de codificación utilizará el 100% de potencia informática en todos sus núcleos de CPU. Como resultado, otras aplicaciones pueden tartamudear.

Windows otorgará por defecto la misma prioridad "normal" a ambas aplicaciones. En este punto, es posible que desee aumentar la prioridad de su software de reproductor de películas. De esta manera, tendrá una reproducción de video fluida a expensas de una codificación de video más lenta porque el software de codificación se degradará a un proceso en segundo plano en comparación con el reproductor de video.

Benjamin Hastings
fuente
"Probablemente, la aplicación de codificación utilizará una potencia de cómputo del 100% en todos los núcleos de su CPU". Eso solo es posible si hay al menos un número de hilos de codificación de núcleos .
Jamie Hanrahan