E' un discorso complesso.
In linea generale ogni core di un processore general purpose può processare 2-4 thread in parallelo (poi ci sono altri meccanismi per far in modo di processare ancora più thread ma a turno), quindi se riduci il numero di thread dovresti ridurre l'impegno della cpu ma al tempo stesso rallentare il programma.
Però ci possono essere dei casi in cui i thread sono difficilmente processabili in parallelo, ad esempio perché ci sono delle dipendenze di dato, e ciò può provocare stalli, che se particolarmente lunghi peggiorano le prestazioni e al contempo tengono occupata la cpu.
In generale se lavori con linguaggi di alto livello il compilatore provvede già a ottimizzare il codice, in modo da ridurre almeno le dipendenze di dato e gli altri tipi di cause di stallo (ad esempio riordinando le istruzioni). Per fare di meglio bisognerebbe analizzare molto nel dettaglio (livello assembly) il codice, ma come detto l'altro giorno un impegno della cpu al 50-60% è più che accettabile.
Comunque, se vuoi avere consigli più dettagliati ti conviene chiedere nella sezione ingegneria del software. La mia conoscenza dell'argomento è ancora abbastanza superficiale, dovrei approfondirla quest'anno all'università.
ciao