Ideal ist genau ein einziger (lauffähiger) Thread pro Kern.
Eben. Es gibt schon einen Grund, warum andere Programme nur so viele Threads erlauben, wie man CPU-Threads hat. 7-Zip LZMA2 zum Beispiel.
Außerdem muss man bei Threads mit Speicheranforderungen aufpassen. Zu viele SetLength oder ähnliches im Thread, schon läuft das Ding so schnell wie ohne.