When doing multithreading don't be afraid to have more threads than you have actual numer of cores. Why? Some of theese treads may finish their job before others will. This means that the core on which one of such treads was running before is now idle.
Anywhay creating a few more threads that computer can simultanously use doesn't create so much slowdown that you should worry about that to much (take a look at multithreaded applications which are being runn on single core CPU). Sure overdooing it will definitly lead to noticable performance loss.
Best way is to try and test various scenarios. I would also recomend profiling code blocks which are being executed within your threads to get athleast some idea of how much time does each thread need for its work. This can help you in planning.

And yes using thread pool is a verry good idea becouse as it was sad before creating new thread do takes some time, in worst case scenario even upto 1ms which can be a lot. And yes thread creation time is largly afected by OS kernel usage. That's why high kernel usage (bad drivers, faulty hardware) can quickly lead to systemwide slowdowns or even ustability.