Para responder diretamente à sua pergunta, a menos que você use pinagem de CPU para atribuir manualmente um processo específico a uma CPU específica, seu sistema operacional normalmente agendará tarefas para serem executadas em qualquer que seja a CPU "melhor" para lidar com isso naquele momento e é possível que a tarefa possa ser movida de um lado para o outro entre vários núcleos de CPU, dependendo do que mais a máquina está fazendo ao mesmo tempo.
O resultado prático disso é que, se você executar cinco instâncias do seu programa, elas poderão rodar em cinco CPUs separadas, mas não há garantia de que serão executadas em CPUs separadas. Se cada processo individual usar menos de 20% da capacidade da CPU, é possível (embora improvável) que todos os cinco funcionem no mesmo processador.
Para resolver sua situação mais ampla, se você tiver um programa que processe vários arquivos e use apenas uma pequena quantidade de energia da CPU, há uma boa chance de que seu gargalo seja a capacidade de E / S de disco. Se esse for o caso, acelerá-lo exigirá um disco mais rápido (ou maior cache de disco, se você estiver repetidamente lendo os mesmos dados) e paralelizá-lo em vários processos e CPUs pode realmente reduzir o desempenho forçando o disco a gastar tempo desligando a leitura dos arquivos de entrada da primeira instância e lendo outros arquivos para cada um dos outros processos.
Uma maneira rápida e fácil de testar se você está sendo afunilado por E / S de disco é cat file_1 file_2 file_3... >/dev/null
(onde file_1
, etc. é uma lista de todos os arquivos processados pelo seu programa) e comparar o tempo leva apenas para ler os arquivos (sem fazer qualquer processamento) para o tempo que leva para processá-los.