Each core can only do a single task at any given time, and usually the task doesn't use all the power of the processor when that task is occupying it. There's also a small 'lag' as the processor changes tasks. With those two things in mind, having 2 virtual cores per physical core means that the core (man, I hate repeating the same word so many times) won't be sitting idle as much since two tasks can be running at once. And finally, those two tasks can be done without changing tasks back and forward all the time.