Нет, это не значит. Каждая задача может выполняться в одном потоке на полной скорости ядра. Когда один из них блокируется (например, во время ожидания относительно медленного ввода-вывода из основной памяти), другой поток может работать на полной скорости ядра.
Обратите внимание, что при использовании двухъядерной установки с одним ядром вы можете одновременно использовать только некоторые ресурсы в одном потоке. Например, если вам нужно запустить два потока и оба должны прочитать данные из основной памяти, то это может сделать только один поток. Другим придется подождать. Если у вас есть два потока, и один из них выполняет что-то исключительно на кристалле (например, используя ALU), в то время как другой выполняет чтение из основной памяти, то оба могут работать одновременно.
Думайте об этом как о наличии магазина с двумя сотрудниками, но только с одним кассовым аппаратом. Если оба должны получить доступ к кассовому аппарату, тогда придется ждать (ничего не делать). Или, если повезет, только один должен получить доступ к кассовому аппарату, а другой занят разговором со следующим клиентом, пока первый человек управляет регистром. (Таким образом, делая две вещи одновременно).
если это не половина скорости, при условии, что у меня работает только один поток, насколько он ухудшается при включенном HT? 10%? еще?
Это зависит от программы. Наихудший живой случай, который я слышал, - это общее замедление на 30% * 2 (как на самом деле медленнее при включенном HT). Лучший теоретический случай - это почти 100% прирост. На практике, кажется, в среднем около 30% выигрыша в скорости по сравнению с без HT.
* 2: 30% замедление было в реальном производственном коде веб-паука. Но худшие вещи возможны. Например, база данных допускает только два потока в двухъядерном, четырехпотоковом процессоре и планировщике, который постоянно планирует оба потока в одном и том же физическом ядре.
10-09-2014: добавлены две ссылки с соответствующей информацией:
Википедия: Hyper-Threading
Википедия: одновременная многопоточность