O que significa a utilização da CPU de um processo e como ele pode ser diminuído?

O que significa a utilização da CPU de um processo?

Como medi-lo?

Quais são os meios para a reduzir?

Sempre me confundi com este conceito. Eu tentei medir a CPU usada usando o comando ' top ' no Linux. Mas, o que eu observo é que, quando não há nenhum outro processo de usuário em execução, então meu processo parece aumentar e tomar 99% CPU quando não está bloqueado em I/O, mas, se houver outro processo em execução, então ele chega a 45% ou 50%. É aceitável para um processo levar 99% da CPU quando nenhum outro processo está em execução?

quaisquer ligações ou ponteiros na direcção também ajudarão.

Author: Jay, 2010-01-24

5 answers

A utilização da CPU neste contexto é a proporção dos ciclos totais de processamento disponíveis que são consumidos por cada processo.

Se é apenas calcular alguns cálculos de longo curso, então o que você está vendo é normal: o sistema operacional está dividindo os 100% disponíveis de recursos computacionais justamente entre os processos que estão pedindo por ele.

Se, em vez disso, o seu programa estiver à espera de algum evento, como esperar que o utilizador carregue numa tecla ou que a entrada chegue de teh rede, parece que seu programa está em um loop infinito: ele nunca espera por nada, mas apenas afasta o tempo todo. Se for esse o caso, você deve considerar reescrevê-lo de modo que, quando não tem trabalho para fazer, ele espera por alguma coisa. Isso pode estar esperando que o usuário pressione uma chave, para que um pacote chegue em uma conexão de rede ou o que quer que seja. Se for esse o caso, você deve estar procurando por um código que diz: "Há algum trabalho a fazer? Não! Há algum trabalho a fazer? Não! Há algum trabalho a fazer? Não!" loucamente. Se este for o caso, você deve encontrar uma maneira de fazê-lo esperar pelo trabalho usando uma chamada de Sistema Operacional apropriado ou função de biblioteca.

 3
Author: martinwguy, 2010-01-24 08:16:55

A utilização da CPU é basicamente ('tempo gasto usando a CPU' * 100 / 'tempo real'), normalmente calculada em pequenos intervalos.

99% significa que está sempre a acumular números sem esperar. É bastante normal e, por vezes, é isso que queres. Quanto menos espera, mais depressa calculará o resultado.

Quando existem outros processos com a mesma ou maior prioridade, é normal que a utilização da CPU diminua. Afinal, só há uma CPU e um monte de processos tentando usá-lo ao mesmo tempo, de vez em quando seu processo tem que esperar até que outros façam o seu trabalho, então é por isso que a utilização da CPU cai.

Mas, por vezes, a utilização elevada da CPU é má. Quando você tem um processo não crítico trabalhando por horas com alto uso de CPU, outros processos mais críticos não podem obter sua parte justa de CPU e demorar mais tempo para terminar. Para o servidor web Isso significa que menos clientes podem usar o seu servidor. Para o servidor de ficheiros isso significa que os ficheiros demorarão mais tempo a baixar. Os utilizadores reais serão infelizes em ambos os casos. Então, basicamente, depende do que o seu servidor está fazendo e é o seu processo crítico para o seu negócio ou não tanto. Se for crítico, você quer que leve o máximo de CPU possível. Caso contrário, o mínimo possível de CPU.
 2
Author: vava, 2010-01-24 08:17:32

Os programas estão em execução ou à espera, a 100% ou 0%. Quando você vê uma utilização de alguma outra quantidade, como 50%, Isso é uma média ao longo de algum intervalo de tempo, como um segundo. Não te preocupes com a percentagem de Utilização. O que deves fazer é certificar-te que não está a fazer nada que não tenha de fazer. É disso que se trata a sintonização de desempenho.É só isso.

 2
Author: Mike Dunlavey, 2017-05-23 12:17:26

Quais são os meios para a reduzir?

Depende se quiser reduzir a altura do Pico de Utilização da CPU ou a duração do seu cálculo de lentidão ou ambos.

Se a sua aplicação estiver a usar uma CPU de 100% durante um minuto, deseja " reduzi-la "para" 50% durante 2 minutos "ou" 100% durante 30 segundos "ou"50% durante 1 minuto"?

Estes são todos diferentes.

Por exemplo, diga que queria ter a certeza de que uma aplicação nunca está a usar mais de 50% do poder de computação de uma máquina dual-core (eu não estou dizendo que é uma coisa boa para fazer, eu estou apenas dando um exemplo), então há uma maneira muito fácil de fazer isso: você poderia definir a "afinidade de CPU" de seu programa para apenas um dos dois núcleos. Note que eu não recomendo fazê-lo em seu caso: tudo o que estou dizendo aqui é, por uma questão de Completude, que ele existe, tem usos válidos, e há uma razão pela qual tanto os desenvolvedores do Linux quanto do Windows escreveram APIs e comandos do usuário final que permitem definir o CPU afinidade por processo (estas funcionalidades estão totalmente disponíveis tanto para programadores como para utilizadores finais).

Agora, se você quiser reduzir a duração da computação lenghty, você tem que otimizar sua aplicação para que ela use menos recursos (por exemplo, usando um algoritmo que é mais adequado para o seu problema).

é aceitável que um processo leve 99% da CPU quando nenhum outro processo está em execução?

Depende das suas necessidades. Normalmente sim, é. não só aceitável, mas também comum.

 1
Author: SyntaxT3rr0r, 2010-01-24 08:48:27

A CPU é um recurso. O sistema operacional (por exemplo, Linux, ou Windows) gerencia este recurso e garante que todos os seus programas estão tendo o tempo para executar de forma justa.

Então não precisas de te preocupar com isto.
 0
Author: Will, 2010-01-24 08:15:57