¿Qué sucede si configuro el proceso de un solo subproceso con prioridad en tiempo real en una PC multinúcleo?

¿Qué sucede si configuro el proceso de un solo subproceso con prioridad en tiempo real en una PC multinúcleo?

Me refiero al sistema operativo Windows 10, pero creo que la respuesta podría ser independiente del sistema operativo.

En Windows, el nivel de prioridad en tiempo real es el nivel de prioridad más alto; se utiliza para procesar la entrada del teclado y el mouse, por ejemplo.

Por lo que leí en línea:

Configurar un proceso con uso intensivo de CPU en tiempo real significa que el teclado y el mouse dejarán de responder porque el sistema operativo no tendrá suficiente tiempo de CPU para procesar estas entradas.

Básicamente, un proceso configurado con prioridad en tiempo real se ejecutará sin darle la CPU a ningún otro proceso, ni siquiera al administrador de tareas. Si algo sale mal, no podrás detenerlo.

Vea, por ejemplo, esta publicación de Microsoft:Cuando configura un programa 100% de CPU con prioridad en tiempo real, obtiene lo que solicitó.

Pregunta:

Todo esto me hace tener miedo de probar este nivel de prioridad en mi máquina, razón por la cual hago esta pregunta en lugar de probarla yo mismo. Además, una respuesta teórica parece más preparada para el futuro que intentarlo con un guión de juguete.

Si ejecuto un proceso de un solo subproceso con prioridad en tiempo real, entiendo que se ejecutará sin detenerse hasta finalizar. Pero si tengo un segundo núcleo, ¿podré usar mi PC mientras se ejecuta este proceso gracias a este segundo núcleo?

En caso afirmativo, esto tiene aplicaciones prácticas.Puedo ejecutar una tarea computacional cuyo resultado necesito lo antes posible en un núcleo y al mismo tiempo puedo usar mi PC con el otro núcleo.

Respuesta1

Si ejecuto un proceso de un solo subproceso con prioridad en tiempo real, entiendo que se ejecutará sin detenerse hasta finalizar.

Eso es una exageración. Hay varias cosas que hacen que no sea cierto:

  1. Lo que ve en el Administrador de tareas como "prioridad en tiempo real" es en realidad un rango de prioridades a las que pueden acceder los subprocesos del proceso. Es posible que los subprocesos de un proceso en "tiempo real" tengan prioridades más altas que las de otro proceso en "tiempo real". ver mi respuestaaquí. Sin embargo, todas las prioridades dentro de la clase "en tiempo real" son más altas que cualquiera de las prioridades en todas las demás clases.

  2. La mayoría de los subprocesos no gastan todo su código girando en la CPU, por lo que no utilizarán el 100% de la CPU independientemente de su prioridad. La mayoría de los hilos tienen ocasión de esperar cosas de vez en cuando. Por lo general, están esperando a que se complete una E/S, o que se resuelva un error de página difícil, o que algún otro hilo indique que no tienen que esperar más. (El otro hilo podría estar en el mismo proceso o en uno diferente).

  3. Las primeras etapas del manejo de interrupciones de dispositivos de hardware (incluidas las interrupciones del reloj en tiempo real) ocurren independientemente decualquiercódigo basado en subprocesos. Esto no tiene una "prioridad", ya que la prioridad es un atributo de un hilo, pero los hilos no manejan las interrupciones. Tienen prioridad sobre el código basado en subprocesos, independientemente de la prioridad de este último. Puedes ver el tiempo utilizado por estas cosas como "Interrupciones del sistema" en la pestaña Detalles del Administrador de tareas de Windows 10.

La clase de prioridad en tiempo real se diferencia de las otras clases de prioridad en los siguientes aspectos:

  1. Tiene mayor prioridad que todas las demás clases de prioridad (por supuesto).

  2. Los subprocesos de procesos de esta clase no ajustan automáticamente sus prioridades en función de su actividad reciente, como ocurre con los subprocesos de procesos de otras clases, de forma predeterminada. (El ajuste de prioridad de subprocesos se puede activar y desactivar mediante programación, pero de forma predeterminada está activado para procesos que no son en tiempo real).

Pero si tengo un segundo núcleo, ¿podré usar mi PC mientras se ejecuta este proceso gracias a este segundo núcleo?

Probablemente. De hecho, esto es cierto incluso si solo tiene un núcleo que tiene habilitado el hyperthreading.

El uso adecuado de la clase de prioridad en tiempo real NO es para un proceso que requiere un uso intensivo de la CPU. Más bien, utilizamos altas prioridades para tareas que necesitan responder rápidamente a los eventos. El trabajo intensivo basado en CPU en respuesta a esos eventos debe realizarse con prioridades bajas, idealmente por debajo de lo "normal" para mantenerse fuera del camino de los usuarios interactivos.

Respuesta2

Básicamente, el tiempo real es una prioridad muy alta y no debe realizarse a menos que sea necesario. Esto se debe a que si está intentando impulsar un proceso que consumirá todos los recursos disponibles, entonces incluso los procesos básicos (como mencionó el teclado y el mouse) se verán afectados. Esto puede dificultar detener el proceso codicioso.

Lo ideal sería utilizar algo para asignar núcleos en lugar de prioridad. La prioridad afecta a toda la CPU. Si usa VBox, por ejemplo, establecer una cantidad mayor de subprocesos sería mucho más efectivo para realizar múltiples tareas y usarlo al mismo tiempo que establecer la prioridad.

TL;DR Si realiza múltiples tareas con tareas que consumen mucha CPU, asigne núcleos a las tareas y no anule la prioridad al tiempo real. Si es necesario, puede resultar útil utilizar la virtualización para segmentar los recursos.

información relacionada