Мотивация этого вопроса возникает из исследованияПлата Intel Galileo gen2который имеет однопоточный процессор.
- Я ищу концептуальное объяснение того, что это означает для всех приложений пользовательского пространства, которые полагаются на существование потоков?
- Означает ли это, что необходимо внести исправления в ядро, чтобы системные вызовы для запуска потоков эмулировались программно, а не зависели от поддержки потоков процессором?
решение1
Многозадачные системы обрабатывают несколько процессов и потоков независимо от количества процессоров или ядер, установленных в системе, и количества "потоков", которые они обрабатывают. Многозадачность работает с использованием квантования времени: ядро и каждый запущенный процесс или поток каждый может потратить некоторое время на выполнение, а затем система переключается на следующий готовый к выполнению поток. Переключения происходят очень часто, что создает впечатление, что все работает параллельно, даже если это не так.
Все это происходит без каких-либо изменений в API и т. д. Многоядерные системы в любом случае должны иметь возможность запускать больше потоков, чем они физически поддерживают, случай с одним ядром — всего лишь пример этого.
Описание ЦП как однопоточного относится кодновременная многопоточность(SMT или гиперпоточность в мире Intel), а не способность ЦП запускать несколько потоков (или процессов, или задач). Добавление функций SMT в ЦП не добавляет никаких инструкций для помощи в запуске потоков, оно просто позволяет лучше использовать оборудование в некоторых обстоятельствах.