Em que ponto dois processos de CPU interferem entre si?

5

Estou executando vários processos em minha CPU simultaneamente e agora estou tentando descobrir quanto poder de CPU cada um deles pode usar até começarem a incomodar um ao outro:

Para simplificar, vamos supor uma máquina com uma única CPU e assumir que a CPU é o único recurso relevante.

Agora temos dois processos diferentes em execução em nossa única CPU em uma máquina com Windows 7 de 64 bits com prioridade de CPU igual. Vamos chamá-los de P1 e P2 . Tanto P1 quanto P2 usam 20% da CPU cada.

  1. As duas correm da mesma maneira como se o outro não estivesse funcionando também?
    Logicamente, eles iriam, pois há mais do que o suficiente de energia da CPU para que ambos funcionem. No entanto, devido ao compartilhamento da CPU, a situação real pode ser diferente.

  2. Se a resposta para 1. for sim: em que ponto eles começarão a interferir uns com os outros?
    Eles só começarão a interferir um com o outro quando ambos tentarem usar mais de 50% do poder total da CPU, ou irão interferir muito mais cedo por qualquer motivo?

  3. As respostas às perguntas anteriores seriam diferentes se fossem mais de dois processos ou diferentes tipos de processos (com vários segmentos, por exemplo) e como seriam diferentes?

por Wingblade 05.10.2014 / 03:06

1 resposta

7

Ignorando a sobrecarga dos outros processos (você marcou o Windows 7). O kernel irá enfileirar cada thread na ordem em que estão prontos. Há muito mais lá, mas essa é a essência geral.

Cada programa fará muitas coisas, como fazer leituras ou gravações no disco ou na memória, cada uma delas é a sua própria tarefa. Se cada processo usar apenas 20% da CPU; P1 conseguirá executar uma tarefa e, em seguida, P2 executará uma. Se P2 ficar pronto primeiro no segundo turno, P2 executará um seguido por P1 . Isso continuará até que cada um termine e saia.

Agora, a utilização do processo de 100% significa que a cada tempo medido (neste exemplo, 1 segundo), a cada segundo, o processador estará SEMPRE ocupado e sempre computando. No seu exemplo de uso de 40% a cada segundo o processador está trabalhando, fazendo cálculos, por 400 milissegundos. Então, após 10 segundos, o processador ficou em espera por 6 segundos no total. (Ignorando outros programas e acima da cabeça)

  1. Efetivamente sim. Se você entregar apenas uma corrida de cada vez, a sobrecarga de alternância não se aplica, mas se o processador estiver apenas a 40%, isso não é realmente um problema.

  2. Se cada programa precisasse de 100% do processador, você notaria algum tempo de atraso para a troca e para a frente. Lembre-se, um único núcleo pode realmente fazer apenas uma coisa de cada vez, parece que faz mais porque é muito rápido em ir e voltar. Cada um com 50% mais cerca de 0,01% de overhead significa 100,01%, então você estará "aguardando" por 10 milissegundos.

  3. Sim, na introdução, cada programa tinha um número de tarefas, com vários threads em cada tarefa que o programa tinha que fazer (ler e depois escrever) entraria na fila mais cedo, então o tempo de "espera" ser menor e você seria capaz de empacotar o uso de 40% da CPU nos primeiros 400 milissegundos, em vez de ter que incluir o tempo de espera forçando o trabalho a ser espalhado em algo como 600 milissegundos. É efetivamente o mesmo com mais programas, há mais sobrecarga para cada um, mas ainda é insignificante. (A menos que você entre em sistemas em tempo real.)

Novamente, isso é super geral, mas é mais ou menos como vários programas compartilham uma única CPU. Os problemas surgem quando a lógica / programa / agendador é ruim em ordenar a fila de tarefas, isso causa mais sobrecarga, mais sobrecarga o tempo de espera, então mesmo que seu programa precise de apenas 40% cada, a sobrecarga de comutação causará 30% mais tempo trocando tarefas ou esperando.

    
por 05.10.2014 / 03:32