Re: Well, those are threads not physical cores.
"For processors with hyper threading, there are extra registers and execution units in the core so it can store the state of two threads and work on them both."
Are there though? Pretty sure the horrible inefficiency of logical cores I see on most systems (especially craptops) comes down to that NOT being the case. It's just trying to execute two threads in the same compute resource and, frankly, there just ain't enough to go around. It's why in my software I tend to limit execution by physical cores. Logical cores are only good for background processes and services. ;)
(Which, in today's OSes at least, is a useful thing to have. But only helps in that it frees up the junk processes to run in their own hell of ineptitude so that everything else has real compute power to run on.)