Não existe uma regra simples que funcione sempre. As pessoas podem recomendar uma figura específica porque experimentaram uma compilação específica em uma máquina específica e essa foi a melhor configuração, ou porque seguiram algum raciocínio que pode ou não ter alguma relação com a realidade.
Se você é abençoado com muita RAM, então o fator limitante em uma longa compilação será o tempo de CPU. Então, uma tarefa por CPU, mais uma tarefa pendente para esses blocos ocasionais de E / S, é uma boa configuração. Isso torna -j3
para uma CPU dual-core (ou mais precisamente, para uma máquina com duas CPUs - se cada núcleo é hyperthreaded, isso seria 4 CPUs, então -j5
).
Se você tem muito pouca memória RAM, então um fator limitante pode ser que você não pode ter muitos trabalhos simultâneos, ou então eles continuarão trocando de posição. Por exemplo, se você não conseguir caber confortavelmente duas instâncias do compilador na memória, make -j2
talvez já seja mais lento que make
. Como isso depende de quantos processos do compilador você pode encaixar na RAM de uma só vez, não há como obter uma figura geral.
No meio, pode ser benéfico ter mais empregos. Se cada processo de compilador é pequeno, mas a compilação como um todo toca muitos dados, então a E / S de disco pode ser o fator de bloqueio. Nesse caso, você precisará de vários trabalhos por CPU ao mesmo tempo, para que haja sempre um trabalho usando cada CPU, enquanto outros estão aguardando por E / S. Novamente, isso é muito dependente do trabalho de construção e da RAM disponível, aqui no que está disponível para o cache de dados (existe um ótimo após o qual ter muitos trabalhos polui muito o cache).