He was actually referring to me, but here we go:
Hyperthreading makes one physical processor look like 2 (or potentially more) processors to the OS and other applications. Each logical processor holds the state of the architecture in it's own set of registers and they share access to the execution units of the CPU (ALU, FPU, etc).
When 2 tasks are executed there are 2 next instruction pointers (for each logical processor) and each takes turns (alternating each cycle) reading from the trace cache. If only 1 task is active, there is no sharing of resources, the logical processor has full access to all the resources of the CPU. All elements of the CPU are shared in this way.
Unfortunately it isn't perfect. One problem occurs when one logical core goes into an 'idle' look for work state instead of using the halt state when no work is available or the pause state when it is necessary to wait for x cycles. If this happens the logical core takes up resources to look for work/do nothing and impacts performance.