Есть много различных принципов многопоточности (как кардинально различающихся, так и различные только в деталях).
Если очень кратко прогулятся в историю, то получится так:
1) Однозадачные ОС, например первые версии DOS - работает только одна задача - именно из этой задачи все инструкции передаются процессору.
2) Начало многозадачности - в DOS появляется поддержка устройства принтер, который печатает параллельно выполняемой другой задаче. Так появилась идея прерываний. Когда выполнение текущей задачи прерывается и начинает выполнятся другая, потом и она прерывается и возвращается все к первой.
3) Понятие потока. Любое приложение и все что внутри него обернуто в потоки, которые переключает сама операционная система. С одной стороны довольно-таки медленно происходит переключение, но с другой - для пользователя это почти не заметно. Запустить в Windwos 95 два десятка приложений у каждого из которых по 2-3 потока было легко.
4) Идея многопроцессорности. Для того, чтобы увеличить скорость работы было внесено предложение считать различные потоки на разных процессорах - так их придется переключать реже, а значит в целом система будет работать сильно быстрее.
5) Предыдущая идея на тот момент оказалось слишком дорогой и для ее удешевления была сделана идея ядер - саму вычислительную часть сделать в двойном количестве, а обвязку процессора оставить одну на оба ядра. В итоге каждое ядро может обрабатывать множество потоков.
Итого. Многоточность реализуема и без поддержки этого со стороны процессора. Но чем больше ядер в процессоре, тем более заметен будет эффект от многопоточности.