O que acontece se eu definir o processo de thread único como prioridade em tempo real no PC multicore?

O que acontece se eu definir o processo de thread único como prioridade em tempo real no PC multicore?

Estou me referindo ao sistema operacional Windows 10, mas acredito que a resposta pode ser independente do sistema operacional.

No Windows, o nível de prioridade em tempo real é o nível de prioridade mais alto, usado para processar entradas de teclado e mouse, por exemplo.

Pelo que li online:

Definir um processo com uso intensivo de CPU para tempo real significa que o teclado e o mouse não responderão porque o sistema operacional não terá tempo de CPU suficiente para processar essas entradas.

Basicamente, um processo definido com prioridade em tempo real será executado sem ceder a CPU a nenhum outro processo, nem mesmo ao gerenciador de tarefas. Se algo der errado, você não será capaz de impedir.

Veja, por exemplo, esta postagem da Microsoft:Ao definir um programa 100% CPU com prioridade em tempo real, você obtém o que pediu.

Pergunta:

Então, tudo isso me deixa com medo de testar esse nível de prioridade na minha máquina, e é por isso que estou fazendo essa pergunta em vez de tentar sozinho. Além disso, uma resposta teórica parece mais preparada para o futuro do que tentar um roteiro de brinquedo.

Se eu executar um processo de thread único com prioridade em tempo real, entendo que ele será executado sem parar até ser concluído. Mas se eu tiver um segundo núcleo, poderei usar meu PC enquanto esse processo estiver em execução graças a esse segundo núcleo?

Se sim, isso tem aplicações práticas.Posso executar uma tarefa computacional cujo resultado preciso o mais rápido possível em um núcleo e ainda poder usar meu PC com o outro núcleo.

Responder1

Se eu executar um processo de thread único com prioridade em tempo real, entendo que ele será executado sem parar até ser concluído.

Isso é um exagero. Existem várias coisas que tornam isso falso:

  1. O que você vê no Gerenciador de Tarefas como “prioridade em tempo real” é na verdade uma série de prioridades que os threads do processo podem acessar. É possível que os threads de um processo em "tempo real" tenham prioridades mais altas do que os de outro processo em "tempo real". Veja minha respostaaqui. No entanto, todas as prioridades da classe "tempo real" são mais altas do que qualquer uma das prioridades de todas as outras classes.

  2. A maioria dos threads não gasta todo o seu código girando na CPU, portanto, não usarão 100% da CPU, independentemente de sua prioridade. A maioria dos tópicos tem oportunidade de esperar pelas coisas de vez em quando. Geralmente eles estão aguardando a conclusão de uma E/S, ou que uma falha de página grave seja resolvida, ou que algum outro thread indique que eles não precisam esperar mais. (O outro thread pode estar no mesmo processo ou em um processo diferente.)

  3. Os primeiros estágios de tratamento de interrupções de dispositivos de hardware (incluindo interrupções do relógio de tempo real) acontecem independentemente dequalquercódigo baseado em thread. Esse material não tem uma "prioridade", pois a prioridade é um atributo de um thread, mas as interrupções não são tratadas por threads. Eles têm precedência sobre o código baseado em thread, independentemente da prioridade deste último. Você pode ver o tempo usado por essas coisas como “Interrupções do sistema” na guia Detalhes do Gerenciador de Tarefas do Windows 10.

A classe de prioridade em tempo real é diferente das outras classes de prioridade nestes aspectos:

  1. É uma prioridade mais alta do que todas as outras classes prioritárias (é claro).

  2. Threads de processos nesta classe não têm suas prioridades ajustadas automaticamente dependendo de sua atividade recente, assim como threads de processos em outras classes, por padrão. (O ajuste de prioridade de thread pode ser desativado e ativado programaticamente, mas por padrão está ativado para processos que não são em tempo real.)

Mas se eu tiver um segundo núcleo, poderei usar meu PC enquanto esse processo estiver em execução graças a esse segundo núcleo?

Provavelmente. Na verdade, isso é verdade mesmo se você tiver apenas um núcleo com hyperthreading habilitado.

O uso adequado da classe de prioridade em tempo real NÃO é para um processo com uso intensivo de CPU. Em vez disso, utilizamos prioridades elevadas para tarefas que necessitam de responder rapidamente aos eventos. O trabalho intensivo baseado em CPU em resposta a esses eventos deve ser feito com prioridades baixas, de preferência abaixo do “normal”, para ficar fora do caminho dos usuários interativos.

Responder2

Basicamente, o tempo real é uma prioridade muito alta e não deve ser feito a menos que seja necessário. Isso ocorre porque se você está tentando impulsionar um processo que consumirá todos os recursos disponíveis, até mesmo os processos básicos (como você mencionou teclado e mouse) serão afetados. Isso pode dificultar a interrupção do processo ganancioso.

Idealmente, você deve usar algo para alocar núcleos em vez de prioridade. A prioridade afeta toda a CPU. Se estiver usando o VBox, por exemplo, definir o número de threads mais alto seria muito mais eficaz para multitarefa e usá-lo ao mesmo tempo do que definir a prioridade.

DR Se for multitarefa com tarefas que exigem uso intensivo de CPU, aloque núcleos para as tarefas e não substitua a prioridade para tempo real. Se necessário, usar a virtualização para segmentar recursos pode ajudar.

informação relacionada