So che questa domanda è piuttosto vecchia, ma le cose si sono evolute dal 2009.
Ci sono due cose da prendere in considerazione ora: il numero di core e il numero di thread che possono essere eseguiti all'interno di ciascun core.
Con i processori Intel, il numero di thread è definito dall'hyperthreading che è solo 2 (se disponibile). Ma Hyperthreading riduce i tempi di esecuzione di due, anche quando non si usano 2 thread! (vale a dire 1 pipeline condivisa tra due processi: questo è utile quando si hanno più processi, altrimenti no. Più core sono decisamente migliori!)
Su altri processori potresti avere 2, 4 o persino 8 thread. Quindi, se hai 8 core ciascuno dei quali supporta 8 thread, potresti avere 64 processi in esecuzione in parallelo senza cambio di contesto.
"Nessun cambio di contesto" ovviamente non è vero se si esegue con un sistema operativo standard che farà il cambio di contesto per qualsiasi altra cosa fuori dal proprio controllo. Ma questa è l'idea principale. Alcuni sistemi operativi ti consentono di allocare processori in modo che solo la tua applicazione abbia accesso / utilizzo di detto processore!
Dalla mia esperienza, se hai molti I / O, più thread sono buoni. Se hai un intenso lavoro di memoria (leggi sorgente 1, leggi fonte 2, calcolo veloce, scrivi), avere più thread non aiuta. Ancora una volta, questo dipende da quanti dati leggi / scrivi simultaneamente (cioè se usi SSE 4.2 e leggi valori a 256 bit, questo blocca tutti i thread nel loro passaggio ... in altre parole, 1 thread è probabilmente molto più facile da implementare e probabilmente quasi altrettanto veloce se non effettivamente più veloce. Ciò dipenderà dal processo e dall'architettura della memoria, alcuni server avanzati gestiscono intervalli di memoria separati per core separati, quindi thread separati saranno più veloci supponendo che i dati siano archiviati correttamente ... motivo per cui, su alcuni architetture, 4 processi verranno eseguiti più velocemente di 1 processo con 4 thread.)