Right, heregoes - a brief history of how processors work and how programs may make use of the tech.
Initially, when we had one processor core and no multi threading. Programs were calculated a bit at a time, written in threads. A thread is basically a stream of code that makes up a program. Many programs (if not all) have more than one thread.
When only one processor core existed, the processors work was dished out between eeach program in quick succession. Giving the impression that many things were happening at once. Once each program was finished with its turn of a thread, it would release the processor an give other programs a turn. This was
co-operative multi-tasking.
This had problems though, if a program crashed it wouldnt give control of the processor back to everyone else, and a system would hang.
Pre-Emptive multi tasking solved this, whereby the OS would play nanny and stop a failing program from hogging the processor, allowing more efficient use of the processor and an apparently quicker system. Still only doing ONE thing at a time, but fast enough that us mortals thought it was multi tasking.
Then along came hyperthreading. Programs rely on data going into and out of them in order to function. However a lot of the time the data transfers are slower than the processor could run them, in these situations threads would halt waiting for the information before carrying on with the thread. This is where
hyperthreading comes in. Hyperthreading allows (in simple terms) the processor to start ploughing through another thread which is independant of the first one, whilst the first one is waiting for data to be prepared for use. Once it's ready, the processor jumps back to the higher priority thread.
Again, this is still only doing one thing at a time, but now the processor is being used more effectively, so an even faster (apparent) system for us.
The next main step here is multi cores. Which is literally what is says on the tin. Two or more cores can run two or more threads simultaneously. Meaning faster times again. In order for this to work though the programs have to be written intelligently. For example if thread 2 requires the result of thread 1 to run then they cant both be run at the same time - because thread 1 has to finish first. This is a simple example but my point is that programs have to have threads written in such a way that they can be run simultaneously now. The more cores you have, the more intelligent the programming needs to be to make proper use of the extra ability.
Last thing on the cards is turbo boost - this is pretty simple though. Basically the processor slows down one or more of its multiple cores and uses the extra heat / power allowance on the die to boost the clock frequency of the other core, this allows a single thread to be completed faster, for programs which are not happy with the whole simultaneous thread business.
I hope this makes it clearer - It is a SIMPLE description to get the ideas of whats going on in your head. Other people may notice that its not totally technically accurate but its a good image of what's going on I think.
If you've any more questions feel free to PM me or ask!