Definir a prioridade do processo para Alto: Perigoso?

8

Eu li que definir algo para em tempo real é um grande não-não, então eu não vou fazer isso. Mas eu tenho um aplicativo que eu preciso ter certeza de que sempre tem a maior prioridade no meu sistema, pois é crítico para o resto dos aplicativos que estou executando. Existe algum perigo em definir a prioridade para alta, que é um nível abaixo do tempo real?

Além disso, como eu seria capaz de fazer isso alterando o alvo de atalho? Qual é o comando?

eek142
fonte
A configuração "Acima do normal" (windows 7) é mais segura. Alguma discussão aqui ... stackoverflow.com/questions/1663993/…
Moab
1
É muito perigoso. O maior problema é inversão de prioridade o que resulta no processo de prioridade mais alta recebendo uma prioridade efetivamente menor porque pode ser indefinidamente bloqueado por um processo de menor prioridade .
David Schwartz
Como mencionado "Realtime" não é necessariamente ruim, desde que o seu processo seja bem comportado e só seja executado quando for necessário e durma quando isso não ocorrer, caso contrário, ele poderá (e evitará) que outras tarefas sejam executadas inteiramente.
Mokubai
1
@ David Schwartz, Cutler projetou o agendador do Windows para evitar o impasse devido à inversão de prioridade. De support.microsoft.com/kb/96418 , "O agendador do Windows NT resolve esse problema aumentando aleatoriamente a prioridade dos segmentos que estão prontos para execução (nesse caso, os retentores de baixa prioridade). Os encadeamentos de baixa prioridade executam tempo suficiente para liberar seu bloqueio (sair do ponto crítico). O segmento de alta prioridade obtém o bloqueio de volta. Se o thread de baixa prioridade não obtiver tempo de CPU suficiente para liberar seu bloqueio na primeira vez, ele terá outra chance na próxima rodada de agendamento. "
Nicole Hamilton
@NicoleHamilton Então é por isso que às vezes um programa abre alguns instantes de uma só vez se ele não abrir no primeiro clique (e você clicou algumas vezes), devido à alta carga?
Simon Verbeke

Respostas:

6

Em tempo real não é necessariamente um "não-não". Apenas poderia privar outros processos dos ciclos da CPU. Alguns aplicativos não podem lidar com isso. É algo que você teria que experimentar.

Alto deve ser um problema menor. No entanto, você ainda precisa monitorar seu sistema para ver se todos os aplicativos estão se comportando bem.

Aqui está como alterar o processo via linha de comando, que você pode colocar em um atalho:

http://support.microsoft.com/kb/191771

Keltari
fonte
1
No Windows, faz Enfraquecer outros processos com muita facilidade (incluindo o próprio Task Manager).
grawity
3
Tudo depende do seu sistema. Dependendo de como o processo é intensivo em CPU, uma afinidade em tempo real é aceitável. Estou executando um processo em tempo real agora sem problemas. Além disso, pode ajudar a definir uma afinidade com um processador enquanto define a prioridade para o tempo real.
Keltari
Se um processo for definido para tempo real, será dada prioridade absoluta a todos os outros processos no núcleo em que está sendo executado? Eu tenho tentado encontrar maneiras de dedicar um dos meus núcleos ao Dwarf Fortress enquanto ele está rodando.
SaintWacko
3

Eu diria que depende. Se você tem apenas um núcleo / CPU no seu computador, e é uma tarefa que exige muito da CPU, eu não o colocaria em tempo real. Alta pode estar bem, mas isso precisa ser experimentado.

Se você tiver vários núcleos e o processo for de thread único: vá em frente, configure como quiser. Seus outros núcleos ainda estarão livres, mesmo quando um núcleo estiver com carga de 100% o tempo todo.

Se você tiver vários núcleos e o processo for multiencadeado: dependerá se todos os encadeamentos tiverem 100% de carga. Alguns programas possuem um thread 'manager' que despacha o trabalho para outros threads, mas não faz muito processamento propriamente dito. Isso deixaria um núcleo quase livre e, assim, permitiria prioridade alta ou em tempo real.

Outros programas tentarão absorver todos os núcleos. Nesse caso, alta pode ser boa, mas precisa ser experimentada.

Mesmo os outros só terão um número específico de núcleos e poderão não usar todos os núcleos disponíveis. Nesse caso, a prioridade alta ou em tempo real deve ser boa.

A menos que você esteja em um único núcleo, vá em frente, experimente. Na maioria das vezes não vai doer para configurá-lo para alta ou até mesmo em tempo real. Você pode definir a afinidade de um processo (quantos núcleos ele pode usar) no gerenciador de tarefas também. Dessa forma, você pode equilibrar melhor a carga na sua CPU. Também pode ajudar a manter as temperaturas e o consumo de energia baixos, etc.

Simon Verbeke
fonte
+ 1 bom ponto que um aplicativo single-threaded não é problema em uma máquina multi-core, não importa o quanto de computação.
Nicole Hamilton
Não se esqueça, porém, que, como foi advertido, [primariamente] processos de alta prioridade com encadeamento único - mesmo que afetem apenas um único núcleo - podem conter bloqueios de sincronização do sistema global por um período de tempo anormal.
dyasta
1

Se isso funcionará para você depende inteiramente do que seu aplicativo faz. Se estiver demorando para uma computação longa e longa que nunca precise esperar pela E / S, espere que a execução em alta prioridade possa deixar sua máquina de joelhos. Mas se o problema for latência e seu aplicativo precisar ser ativado muito rápido em resposta a uma conclusão de i / o ou evento similar, faça um pequeno processamento rápido e volte a dormir novamente, tudo ficará bem.

Nicole Hamilton
fonte