Haven't really put much thought into CPUs lately, but had this come up and I'm disappointed my Google-fu did not find a good answer I remember hyper-threading, where a core was 'pseudo-divided' into ...
To get maximum parallelization for an application, not only must the application be developed to take advantage of multiple cores, but should also have the code in place to keep a number of threads ...