Basically, hyperthreading is a latency hiding technique. While you may have a bunch of different programs open at once, the processor executes them one at a time. The scheduling is done very rapidly and the processor switches from task to task very quickly, so it looks like all of those programs are running at once when the processor is actually working on only one at a time. Hyperthreading allows the processor to work on two at a time, by allowing portions of the processor that would otherwise be idle to work on the second thread. That sounds good in theory, but for a number of reasons(contention caused by shared resources, and lack of software support mostly), it hasn't really worked out in practice.The only places where it really shines is in the case of a branch misprediction because the processor can continue to execute other threads while the needed data is retrieved from the system RAM.
And also, i dont see too may multi threaded applications right now that would increase the performance, you can definitely create an environment where u will see a lot of difference, but in practice......