![Usar o tempo de CPU “inativo” ainda retarda outros programas](https://rvso.com/image/1289063/Usar%20o%20tempo%20de%20CPU%20%E2%80%9Cinativo%E2%80%9D%20ainda%20retarda%20outros%20programas.png)
Antes, quando eu rodava um cliente Folding@Home, e agora, ao usar o BOINC, eles sempre usavam tempo de CPU "inativo" (para aqueles que não estão familiarizados com esses programas, eles executam enormes cálculos científicos no seu computador, muito intensivos). Porém notei que tanto no Windows quanto no Linux tentando fazer outras coisas (Firefox, programar em Netbeans, etc) todos esses programas são extremamente lentos.
Agora eu sei que você pode fazer coisas como executar apenas os clientes em 2 ou 3 núcleos (assumindo um sistema de 4 núcleos), mas estou mais interessado em saber por que esse tempo de CPU "inativo" faria com que programas com prioridade normal ficassem lentos. Um processo com prioridade normal não seria executado primeiro antes do processo com prioridade ociosa, interrompendo-o se necessário? Por que é difícil para os sistemas operacionais gerenciar isso?
Responder1
Esses programas não estão realmente sendo executados durante o tempo "inativo" da CPU, eles estão sendo executados como processos de baixa prioridade. Quando um sistema operacional está executando vários aplicativos, ele usa um agendador de processos para determinar quais processos têm acesso à CPU e com que frequência. Isso é chamado de multitarefa preemptiva.
O escalonador usa prioridades de processo para determinar quais processos têm acesso à CPU. Um processo de prioridade normal terá prioridade no agendador sobre um processo de prioridade ociosa, mas a CPU ainda está sendo usada e há alguma sobrecarga na alternância de contexto entre threads e processos.
Como a CPU agora está funcionando a 100% o tempo todo, em vez de ter ciclos ociosos disponíveis, não é difícil imaginar que alguns processos e interrupções possam demorar mais do que se a CPU estivesse ociosa devido à sobrecarga de troca de threads.
Alguns desses programas têm a opção de interromper a execução do processo quando o computador está em uso. Eles fazem isso detectando a atividade do mouse ou teclado e desativando-se por um determinado período de tempo até que o computador esteja ocioso novamente, momento em que eles serão reiniciados. Eu sugeriria olhar para essa opção.
Outra coisa a salientar é que quando uma CPU está ociosa ela usa significativamente menos energia do que quando está em pleno uso. Portanto, enquanto seus programas usam ciclos de CPU "sobressalentes", eles podem facilmente dobrar o consumo de energia do seu PC, custando vários dólares por mês em eletricidade.
Responder2
Só preciso acrescentar algumas pequenas coisas à resposta do Chris Thompson, ele já disse a parte principal.
O consumo de energia e o efeito na sua conta de luz podem ser realmente significativos, só para enfatizar um pouco mais isso. As razões pelas quais outros programas podem ser afetados pelos threads adicionais de baixa prioridade podem ser um trabalho adicional ao alterar processos (cache e registros estão realmente em uso agora). E as operações de E/S também podem ter alguma influência. A maior parte do trabalho desses programas exige apenas uso intensivo da CPU e pode ser influenciado pela prioridade do processo, mas a E/S adicional é difícil de priorizar. E o uso adicional de memória também torna o sistema mais lento. Se a sua memória estiver bastante cheia, a troca poderá diminuir significativamente o desempenho do seu sistema.
Para elaborar mais sobre o consumo de energia: encontrei números reais de consumo de energia para um Intel Core i7 Extreme Edition de cerca de 300 Watts sob carga pesada. Os processadores Intel Core mais recentes têm alguns recursos de economia de energia realmente interessantes que permitem até mesmo que a CPU corte a energia de diferentes núcleos se eles estiverem ociosos. Então, suponho que você poderia usar de 150 a 200 Watts a mais se sempre tivesse esses programas em execução. (Números mais antigos que encontrei mostram uma diferença de mais de 150 Watts) Mas como não encontrei números confiáveis, vamos supor que você use 100 Watts a mais (não se esqueça que seu sistema de refrigeração também precisa funcionar mais, se sua CPU gerar mais calor) - isso dá 100*24*30 = 72 kWh/mês ou 864 kWh/a se o seu PC funcionar 24 horas por dia, 7 dias por semana.