Sorry for being stupid but recently I stamped upon Hyperthreading and I was amazed how epic and awesome it is but I was wondering what problems it can fix.
So hyperthreading refers to having more virtual CPU to one real CPU. Because we only have one real CPU we can only execute one instruction at a time (so no parallelism). So, what really happens is that the CPU pretends it has more cores and it uses his logic to speed up execution. The virtual CPUs can share physical execution resources. Hyperthreading can speedup the execution of a program but it is not as good as having more real CPUs.
Check out these answers for more detailed info: Does a hyperthreading CPU implement parallelism or just concurrency?