Das Betriebssystem verteilt Threads über Kerne.
Ein Prozess besteht aus einem oder mehreren Threads.
Ein Prozess, der nur einen Thread hat, kann nur auf einem Kern ausgeführt werden. Ein Prozess mit 2 Threads kann auf einem Kern oder zwei Kernen ausgeführt werden. Ein Prozess mit 500 Threads kann auf so vielen Kernen wie möglich ausgeführt werden (beispielsweise 125 Threads pro Kern für einen Quad-Core).
Es liegt also alles am Prozess.
Dies wird immer nur auf einem Kern laufen:
for(i=0; i<1000; i++) { do_something_intensive(); }
Dies ist eher kernfreundlich:
pthread_create(pth1,&do_something_intensive,attr,&args); pthread_create(pth1,&do_something_else_intensive,attr,&args);
Zum Beispiel.