Как возможен параллелизм на одном потоке / ядре?
современные языки программирования предоставляют пользователям механизмы параллелизма и параллелизма в качестве граждан первого класса. Я понимаю, как программируются параллельные алгоритмы, и могу себе представить, как два потока на многоядерном процессоре могут работать параллельно.
тем не менее, большинство этих платформ также поддерживают запуск параллельных процессов в одном потоке.
- эти процессы действительно работают параллельно?
- как на уровне сборки двух различных процедуры выполняются одновременно в одном потоке?
2 ответов
TLTR; : параллелизм (в смысле true simultanenous выполнение) на одном, не гиперпространственном ядре процессора, невозможно.
оборудование (
- многоузловых
- Multi-процессор
- многоядерные
- multi-threads ("Hyper-Threading", т. е. " HT") (Edit: я voluntarity опустить в случае векторизованных compuations, где несколько Алу может быть действие тем же ядром)
ваш вопрос касается запуска двух программных потоков в случаях 3. (в случае, если HT недоступен / отключен) или 4.
в обоих случаях процессы фактически не выполняются параллельно. Пользователь имеет впечатление одновременности из-за чрезвычайно быстрых контекстных переключателей, выполняемых на уровне ЦП, которые, как правило, выделяют последовательно физические core (соотв. thread) время до одного или другого программного потока
в обоих случаях, эти программы просто не выполняются одновременно, а последовательно
относительный приоритет, выделенный каждой из этих 2 подпрограмм, может быть установлен на различных ОС с помощью "приоритета", который вы даете процессу, который будет обрабатываться планировщиком ОС, который, в свою очередь, будет выделять время процессора.
HTH.
выполнить тесты к лучшему поймите эту тему, вы можете захотеть google "сходство cpu". Это позволит вам запустить двухпоточный процесс на одном физическом ядре многоядерного процессора и время, затраченное каждым из потоков, при изменении их приоритета и т. д...
Да, есть is параллелизм в каждом потоке, и вы получите его бесплатно, независимо от того, какой язык программирования вы используете (хотя количество параллелизма могут различаться).
Это называется параллелизм на уровне инструкций. Детали довольно сложны и различаются между различными микроархитектурами процессора.
Компьютерная Архитектура: Количественный Подход является блестящей книгой, которая включает в себя главу на уровне инструкций параллелизм и примеры из книги учат рациональному мышлению в области инженерии.
проверьте следующие ссылки для получения дополнительной информации:
http://en.wikipedia.org/wiki/Superscalar