2009-11-02 22 views

Respuesta

65

Un subproceso de prioridad en tiempo real nunca puede ser vaciado anteriormente por interrupciones del temporizador y se ejecuta con una prioridad más alta que cualquier otro hilo en el sistema . Como tal, un hilo de prioridad en tiempo real enlazado a la CPU puede arruinar totalmente una máquina.

La creación de subprocesos de prioridad en tiempo real requiere un privilegio (SeIncreaseBasePriorityPrivilege) por lo que solo lo pueden hacer los usuarios administrativos.

Para Vista y más allá, una opción para las aplicaciones que requieren que se ejecuten en prioridades en tiempo real es usar el Multimedia Class Scheduler Service (MMCSS) y dejar que administre su prioridad de subprocesos. El MMCSS evitará que su aplicación utilice demasiado tiempo de CPU para que no tenga que preocuparse por el tanque de la máquina.

+4

¿Podría ser peligroso para el sistema poner un solo proceso aleatorio (como un videojuego) en prioridad en tiempo real? ¿Se recomendaría la alta prioridad/habría una caída de rendimiento notable para esa aplicación? – mrfred

+9

@mrfred No diría que es peligroso, solo que ralentiza todo el sistema si es un programa grande. Intenta establecer la prioridad de Minecraft en tiempo real. Confía en mí, es divertido. Su mouse se ralentiza, las teclas tardan 5 segundos en responder, y explorer.exe deja de responder. –

+1

@mrfred Personalmente he ejecutado Skyrim en alta prioridad y en tiempo real durante meses, y ha hecho que el juego sea mucho más sencillo, con solo el artefacto de audio ocasional (por la razón que sea). Nunca he tenido ningún problema al hacer esto ... Supongo que el sistema al menos se sobrecalentaría si algo estuviera yendo terriblemente mal, pero por supuesto, realmente no sé qué PODRÍA salir mal. Tal vez tener múltiples núcleos contrarresta cualquier inanición de recursos para dispositivos IO, etc. – Totem

22

Simplemente, la clase de prioridad "Real Time" es más alta que la clase de prioridad "Alta". No creo que haya mucho más que eso. Oh sí, tienes que tener el SeIncreaseBasePriorityPrivilege para poner un hilo en la clase de tiempo real.

Windows a veces aumenta la prioridad de un hilo por varias razones, pero no aumentará la prioridad de un hilo en otra clase de prioridad. Tampoco aumentará la prioridad de los hilos en la clase de prioridad en tiempo real. Por lo tanto, un subproceso de alta prioridad no recibirá ningún aumento automático temporal en la clase de prioridad en tiempo real.

capítulo "en Windows" de Russinovich sobre la forma en que Windows maneja prioridades es un gran recurso para aprender cómo funciona esto:

Tenga en cuenta que no hay absolutamente ningún problema con una rosca que tiene una real -tiempo prioridad en un sistema de Windows normal, no son necesariamente para procesos especiales que se ejecutan en máquinas dedicadas. Imagino que los controladores y/o procesos multimedia pueden necesitar hilos con prioridad en tiempo real. Sin embargo, dicho subproceso no debería requerir mucha CPU, debería estar bloqueando la mayor parte del tiempo para que los eventos normales del sistema obtengan procesamiento.

+6

Sí, los subprocesos en tiempo real son apropiados si tiene un hilo que no tiene mucho que hacer, pero * necesita * para experimentar buenos tiempos de respuesta. – Artelius

+0

Sé que sé que es una publicación anterior, pero encontré ese capítulo del libro realmente bueno ... ¡me pusieron en marcha! https://www.google.ca/search?q=C04X1116607.pdf&ie=utf-8&oe=utf-8&gws_rd=cr&ei=cSTqVJzQNvHnsATun4CIDA#q=X1116607.pdf – MotherDawg

12

Sería la configuración de prioridad más alta disponible, y por lo general solo se usaría en la casilla dedicada a ejecutar ese programa específico. De hecho, es lo suficientemente alto como para causar la inanición de los hilos del teclado y el mouse en la medida en que dejan de responder.

Así que, básicamente, si usted tiene que pedir, no lo use :)

+0

De acuerdo. Es importante saber lo que significa (se le da la máxima prioridad a ese hilo, por encima de todo), pero si alguna vez te preguntas si deberías usarlo, definitivamente no deberías. –

+3

¿cómo vas a aprender a usarlo si no preguntas cómo usarlo?Supongo que puedes usarlo y ver qué pasa, entonces aprenderás pero siento tu desalentador aprendizaje – fifamaniac04

2

En tiempo real es la prioridad más alta clase disponible para un proceso. Por lo tanto, es diferente de 'Alto' en que es un paso más grande, y 'Más de lo normal' porque es dos pasos más grande.

Del mismo modo, en tiempo real también es un nivel de prioridad de subprocesos.

La prioridad de proceso clase aumenta o disminuye todas las prioridades efectivas de subprocesos en el proceso y, por lo tanto, se considera la 'prioridad base'.

Por lo tanto, un proceso tiene una:

  1. proceso de Base clase de prioridad.
  2. Prioridades de hilo individual, compensaciones de la clase de prioridad base.

Dado que en tiempo real se supone que está reservado para aplicaciones que absolutamente deben adelantarse a otros procesos en ejecución, existe un privilegio de seguridad especial para proteger contra el uso fortuito de este. Esto está definido por la política de seguridad.

En NT6 + (Vista +), el uso de Vista Multimedia Class Scheduler es la forma correcta de lograr operaciones en tiempo real en lo que es no un sistema operativo en tiempo real. Funciona, en su mayor parte, aunque no es perfecto ya que el sistema operativo no está diseñado para operaciones en tiempo real.

Microsoft considera que esta prioridad es muy peligrosa, con razón. Ninguna aplicación debe usarla, excepto en circunstancias muy especializadas, e incluso entonces tratar de limitar su uso a las necesidades temporales.

1

Cuando Windows descubre que un programa usa una prioridad superior a la normal, parece que limita la prioridad del proceso.

Establecer la prioridad de IDLE a REALTIME NO cambia el uso de la CPU.

Encontré en mi CPU AMD multiprocesador que si dejo caer una de las CPU como la ÚLTIMA, el uso de la CPU será MAX OUT y la última CPU permanecerá inactiva. La velocidad del procesador aumenta al 75% en mi Quad AMD.

Usar el Administrador de tareas-> seleccionar proceso-> Hacer clic con el botón derecho en el proceso-> Seleccionar-> Establecer afinidad Hacer clic en todos menos en el último procesador. El uso de la CPU aumentará al MAX en los procesadores restantes y conteos de cuadros si el video de procesamiento aumentará.

+1

Tiene razón en que cambiar la clase de prioridad del proceso no afecta la utilización de la CPU, siempre y cuando no haya contención para la CPU. PERO, te equivocas al pensar que Windows limita las prioridades de proceso máximas en función de la utilización de la CPU. En cambio, un privilegio de seguridad protege contra la configuración de 'tiempo real' para evitar el uso fortuito. –

+0

(leyendo años después) - El problema aquí es que los hilos no se pueden dividir. Por lo tanto, puede tener 8 núcleos, pero solo 2 hilos vinculados a la CPU (100% activos). Por lo tanto, dices "¿Por qué no se usan mis otros 6 núcleos?". O, en su caso, "¿Por qué no se usa mi último núcleo?". Los núcleos restantes parecerán no hacer nada. Y así es como lo quieres. Si el hilo se intercambiara de núcleo a núcleo, disminuiría el rendimiento. El desarrollador de la aplicación tiene múltiples hilos y no todo puede ser multihilo. –

0

Básicamente es mayor/mayor en todo lo demás. Un teclado tiene menos prioridad que el proceso en tiempo real. Esto significa que el proceso se tendrá en cuenta más rápido que el teclado y, si no puede manejarlo, se ralentizará el teclado.

0

Al igual que todas las otras respuestas antes de tiempo real, le da a ese programa la máxima prioridad. Nada se procesa hasta que el programa haya sido procesado.
En mi máquina pentium 4 configuré Minecraft en tiempo real mucho ya que aumenta mucho el rendimiento del juego, y el sistema parece completamente estable. así que en tiempo real no es tan malo como parece, solo si tienes un multi-core establece la afinidad de un programa con un núcleo específico o núcleos (simplemente no todos, solo para permitir que todo lo demás sea capaz de funcionar en caso de que el tiempo real establecer programas se cuelga) y establecer la prioridad en tiempo real.

Cuestiones relacionadas