забывают о проблемах, им свойственных.>Со временем его портировали на большие
>машины и стали использовать в серьезных приложениях, по ходу дела
>решили, что лишние переключения контекста MMU вроде как не очень хороши,
>потому как ощутимо тормозят многопроцессное приложение/систему. И решили
>делить адресное пространство
>между потоками управления.
Существует в природе такая проблема, как проблема когерентностей кэшей.
Она имеет место в многопроцессорных системах и, в частности,
когда о ней говорят производители железа, она оценивается как
весьма серьезная в том смысле, что решается ценой существенного overhead.
Проблема решается аппаратным путем и, как правило, многие программисты о
ее существовании даже не подозревают.
Чтобы далеко в теорию не заплывать, приведем пример:
Пусть мы имеем 4 процессора. На каждом работает по одному потоку нашей программы.
Адресное пространство -- единое, следовательно, переменные и структуры
данных -- тоже. Как мы помним, процессор работает с данными, находящимися
в его кэше.
Когда поток пытается обновить значение какой-либо переменной (или структуры),
с которой он работает, необходимо определить, присутствует ли ее значение
в кэшах других процессоров и, если оно присутствует, его необходимо синхронизировать.
Весь этот процесс и называется "проблемой когерентности кэшей".
Когда одновременно работают несколько процессов -- проблемы когерентности не
возникает по понятным причинам.
На мой взгляд, именно проблема когерентности и давала основную пищу для
противников многопоточных архитектур. Но эти дебаты, насколько я понимаю, для
многих неизвестны или уже не актуальны.
Теперь о том, для чего это я написал:
Потому, что считаю необходимым прояснить причину возникновения потоков.
А именно, причина заключается не в том, что процесы переключать медленнее,
а в том, что межпоточные взаимодействия программировать легче, т.к. имеет
место общая память и размер ее (условно) не ограничен (не нужно связываться с
какими-либо механизмами IPC типа Shared Memory).
Кроме этого, резюмируя, хочу сказать, что вполне вероятна ситуация,
когда многопроцессные системы в конкретных частных случаях будут более
производительными, чем их многопоточные аналоги, всилу вышеуказанной проблемы.