The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Linux Threads"
Версия для распечатки Пред. тема | След. тема
Форум Программирование под UNIX
Исходное сообщение [ Отслеживать ]

. "Linux Threads: говоря о потоках, по незнанию или умышленно ..." +/
Сообщение от proffemail (?), 21-Окт-03, 11:54 
забывают о проблемах, им свойственных.

>Со временем его портировали на большие
>машины и стали использовать в серьезных приложениях, по ходу дела  
>решили, что лишние переключения контекста MMU вроде как не очень хороши,
>потому как ощутимо тормозят многопроцессное приложение/систему. И решили
>делить адресное пространство
>между потоками управления.

Существует в природе такая проблема, как проблема когерентностей кэшей.
Она имеет место в многопроцессорных системах и, в частности,
когда о ней говорят производители железа, она оценивается как
весьма серьезная в том смысле, что решается ценой существенного overhead.
Проблема решается аппаратным путем и, как правило, многие программисты о
ее существовании даже не подозревают.

Чтобы далеко в теорию не заплывать, приведем пример:
Пусть мы имеем 4 процессора. На каждом работает по одному потоку нашей программы.
Адресное пространство -- единое, следовательно, переменные и структуры
данных -- тоже. Как мы помним, процессор работает с данными, находящимися
в его кэше.

Когда поток пытается обновить значение какой-либо переменной (или структуры),
с которой он работает, необходимо определить, присутствует ли ее значение
в кэшах других процессоров и, если оно присутствует, его необходимо синхронизировать.
Весь этот процесс и называется "проблемой когерентности кэшей".

Когда одновременно работают несколько процессов -- проблемы когерентности не
возникает по понятным причинам.
На мой взгляд, именно проблема когерентности и давала основную пищу для
противников многопоточных архитектур. Но эти дебаты, насколько я понимаю, для
многих неизвестны или уже не актуальны.

Теперь о том, для чего это я написал:
Потому, что считаю необходимым прояснить причину возникновения потоков.
А именно, причина заключается не в том, что процесы переключать медленнее,
а в том, что межпоточные взаимодействия программировать легче, т.к. имеет
место общая память и размер ее (условно) не ограничен (не нужно связываться с
какими-либо механизмами IPC типа Shared Memory).

Кроме этого, резюмируя, хочу сказать, что вполне вероятна ситуация,
когда многопроцессные системы в конкретных частных случаях будут более
производительными, чем их многопоточные аналоги, всилу вышеуказанной проблемы.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Linux Threads, Григорьев Алексей, 23-Сен-03, 12:12  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру