Nuestro equipo de expertos despúes de muchos días de trabajo y recopilación de de datos, dimos con la solución, deseamos que te resulte útil en tu plan.
Solución:
Suponga que tiene una tarjeta de “ir a la cabeza de la fila” para la tienda de comestibles. Vas a la tienda, llenas tu carrito, vas a los mostradores de pago y ves que no hay nadie en la fila. ¿Su tarjeta le ayuda a obtener un pago 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, debemos mencionar los 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 solo un hilo, la distinción es bastante borrosa desde el exterior).
(Por cierto: la terminología de marketing mediante la cual una CPU tiene, por ejemplo, “cuatro núcleos y ocho subprocesos”, es engañosa. Las CPU tienen núcleos, pero las CPU no “tienen” subprocesos. Los subprocesos son parte de los procesos. Un núcleo de CPU sin hyperthreading habilitado poder correr un hilo con hyperthreading habilitado, un núcleo poder correr dos hilos. Pero las CPU no “tienen” subprocesos).
Cada hilo está siempre en uno de varios estados de programación. Los estados más comúnmente vistos son: Esperando (* nix llama a esto “bloqueado”; en ambos sistemas operativos esto significa esperar E / S o similar, no usa tiempo de CPU y no quiere ninguno); Listo (quiere usar el tiempo de la CPU pero no hay CPU disponibles para ello 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 utiliza cero% de tiempo de CPU en herramientas como el Administrador de tareas.
Un subproceso solo puede ejecutarse en un núcleo (o, si el hyperthreading está habilitado, “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 afirmación del sistema en su conjunto).
La mayoría de los subprocesos en la mayoría de los sistemas pasan la mayor parte del tiempo en estado de espera. (Esta es la razón por la que 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 subprocesos “de trabajo” de cosas como video o renderizado 3D, juegos, etc. Muy pocos subprocesos Realmente podrían usar el 100% de la CPU, porque generalmente tienen que trabajar con algunos datos de entrada que tienen que leer desde algún lugar, y generalmente crean datos de salida que deben escribirse en algún lugar. Y pueden hacer referencia a una gran cantidad de 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.
Pero los subprocesos que hacen algo como renderizado de video o renderizado de imágenes en 3D bien podrían pasar casi todo su tiempo “computando” en la CPU, y muy poco esperando por E / S. Estos subprocesos a menudo se denominan “vinculados a la computación”, lo que significa que su rendimiento general está principalmente limitado por la velocidad de la CPU.
La configuración que realiza en el Administrador de tareas en realidad establece la “prioridad base” para todos los subprocesos del proceso. La prioridad real o “actual” del hilo puede ser mayor (pero nunca menor que la base). Más sobre esto en un momento. Las decisiones de programación (“quién se ejecuta y en qué CPU”) siempre se realizan utilizando la prioridad actual del hilo. La prioridad solo es significativa para los subprocesos listos y en ejecución (o, para decirlo de otra manera, la prioridad no es significativo para los hilos en espera).
Windows usa un con derecho preferente algoritmo de programación. Si solo un subproceso en el sistema quiere usar el tiempo de la 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 “retiene” una parte de la capacidad de la CPU cuando se está ejecutando un subproceso de baja prioridad, solo en caso de que aparezca algo de mayor prioridad.
Si dos subprocesos quieren usar una CPU y tienen la misma prioridad, entonces se programan mediante lo que se llama “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 de menor prioridad nada.
(En la práctica, no obtendrá nada, porque experimentará un “aumento de prioridad para evitar la inanición” periódico que puede darle algunas decenas de milisegundos cada 4 o 5 segundos más o menos. Pero esto no es realmente una excepción a la “prioridad más alta gana “, porque se hace ajustando la prioridad del hilo muerto).
Si tiene más de un núcleo de CPU, las cosas se ponen más interesantes y las prioridades en general menos efecto. Suponga que tiene dos subprocesos que se quieren ejecutar. Y suponga 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. Entonces sus dos hilos obtendrán cada uno el 100% de un núcleo, independientemente de sus respectivas prioridades.
(Dos personas se presentan en el supermercado y hay dos damas gratis. Uno de los clientes tiene una tarjeta de “ir al principio de la fila”. 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”.
No voy a entrar mucho en el hyperthreading aquí, 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 un núcleo si HT estuviera desactivado. es decir, se tratan como CPU “reales”, con esta excepción: Windows se esforzará mucho en no utilizar más de un LP en un núcleo a la vez. es decir, normalmente no comienza a ver ambos LP en un núcleo hasta que tenga más de numero de nucleos subprocesos que intentan ejecutarse todos al mismo tiempo. Esto se debe a que los dos “procesadores lógicos” no ofrecen el doble de rendimiento que un solo núcleo sin subprocesos.
Acerca de la “prioridad base”: Windows ajustará (“aumentará” y “decaerá”) la prioridad actual de los subprocesos en función de lo que hayan hecho recientemente. Los subprocesos que completaron operaciones de E / S recientemente estarán normalmente una muesca o dos por encima de la base; Los subprocesos de la interfaz de usuario (subprocesos que se ejecutan en una ventana) a menudo serán considerablemente más altos; Los subprocesos vinculados 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 cosas como 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 se molestan. (Más de ellos deberían hacerlo).
Están sucediendo otras cosas. Debido al aumento / disminución de la prioridad, y porque los sistemas de multiprocesamiento (ya sea multinúcleo o de hiperproceso, o ambos) son tan comunes en estos días, y porque siempre hay cosas que se ejecutan en segundo plano en Windows (pero, esperamos, no usan 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 darle una imagen cercana a la correcta.
En conclusión…
Es razonable dejar la mayoría de las cosas en “Normal”. Si no lo hace, puede terminar fácilmente pasando hambre con algo que realmente le gustaría que funcione (aunque no sepa que existe), como las funciones de vaciado de la memoria caché del disco del sistema operativo. De hecho, muchos de los procesos del sistema operativo serán distintos a Normal, y deben dejarse donde los coloque Windows.
Un caso razonable para usar el Administrador de tareas para jugar con las prioridades es si tiene alguna tarea que acapara la CPU (como video o renderizado 3D) y está ralentizando el uso del sistema mientras se está ejecutando. Lo correcto es, lo crea o no, más bajo su prioridad por una muesca o dos. Felizmente usará todos los ciclos de CPU que nada más quiere, pero se mantendrá fuera del camino de su uso interactivo del sistema. Puede que tarde un poco más en hacer su trabajo, pero lo hará con una mínima interferencia en el uso interactivo de otros programas. Si no le gusta esa compensación, ¡no la haga! Pero configúrelo en una prioridad alta en un intento de “hacerlo funcionar más rápido” y es posible que bloquee toda la interfaz de usuario hasta que finalice.
Nunca establezca nada en la denominada clase de prioridad en tiempo real.
(Editar – se agregó este párrafo) Ok, esa es una declaración extrema. (“Ningún reclamo universal es true – sin exceptuar este. “) Al menos, no sin una consideración muy cuidadosa. Si su objetivo es hacer que algo se ejecute más rápido, probablemente no ayudará. Pero podría” bloquear “su sistema (requiriendo un reinicio, o en la mayoría de las máquinas modernas, requieren un ciclo de energía). O hacer que no responda tanto que bien podría estar bloqueado.
nb: Cualquier aplicación de reproductor de video debe optar por la función “Programación de clases multimedia” en Vista y versiones posteriores. Esto le dará automáticamente hasta el 80% de una CPU, calculado en intervalos relativamente cortos. Si no puede obtener una reproducción sin fallas 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 por Solomon, Russinovich e Ionescu.
Consulte también mi respuesta aquí para obtener información sobre cómo se establecen las prioridades de procesos y subprocesos, y el significado de la columna “Prioridad” en el Administrador de tareas.
La alteración de las prioridades cambia la forma en que el sistema operativo asigna el tiempo de la 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 la potencia de cálculo en todos los núcleos de su CPU. Como resultado, otras aplicaciones pueden tartamudear.
Windows dará de forma predeterminada la misma prioridad “normal” a ambas aplicaciones. En este punto, es posible que desee aumentar la prioridad de su software de reproducción 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 de fondo en comparación con el reproductor de video.
Si crees que ha resultado de utilidad este artículo, sería de mucha ayuda si lo compartieras con más seniors así nos ayudas a extender esta información.