Eu estou supondo que seu kernel não os veja como prioritários:)
Se você der uma olhada na sua imagem, poderá ver que os processos do Python têm uma prioridade de 20. Esse é o valor padrão. Isso significa que, se deixarmos de lado outros fatores de planejamento (tempo de CPU já alocado, estado do processo, ...), seus scripts Python serão considerados tão importantes quanto top
, rcu_shed
, sshd
, ... Agora , embora esses processos nem sempre tenham coisas para fazer, eles ainda têm acesso à CPU sempre que entram no diretório RUNNING estado .
Os processos do Linux são executados em quantums de tempo (ou fatias de tempo). Isso significa que a cada
Como sua máquina tem 24 núcleos, basicamente você pode supor que 24 processos podem ser programados para serem executados simultaneamente. Os processos (24) que são selecionados (a cada 100 ms) para agendamento são escolhidos com base em vários fatores. Além disso, um processo também pode ser antecipado se entrar em um estado adormecido antes que sua fatia de tempo expire. A partir do Linux 2.6, o kernel usa o algoritmo Completely Fair Scheduler por padrão. A prioridade de agendamento de processos é baseada principalmente no tempo que cada processo já passou executando e leva em consideração a "prioridade do usuário" (niceness) através de um fator de decaimento :
CFS doesn't use priorities directly but instead uses them as a decay factor for the time a task is permitted to execute. Lower-priority tasks have higher factors of decay, where higher-priority tasks have lower factors of delay. This means that the time a task is permitted to execute dissipates more quickly for a lower-priority task than for a higher-priority task. That's an elegant solution to avoid maintaining run queues per priority.
Agora, é possível (de userland) executar um processo com um valor de niceness personalizado por meio do comando nice
:
nice [OPTION] [COMMAND [ARG]...]
Run COMMAND with an adjusted niceness, which affects process scheduling.
With no COMMAND, print the current niceness. Niceness values range from
-20 (most favorable to the process) to 19 (least favorable to the process).
Tenha em mente que o escalonador do Linux não usa essa prioridade como algo absoluto. Este valor será levado em conta sempre que o kernel precisar selecionar um processo, mas outros fatores também serão levados em conta: a ganância de seus processos torna muito menos provável que sejam selecionados de qualquer maneira (o nome do algoritmo é bastante auto- explicativo sobre isso: p) .