Re[2]: Многопоточность сегодня
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 11.10.07 10:35
Оценка: +2
Здравствуйте, Кодёнок, Вы писали:

Кё>4. Multithreading с общими данными (синхронизацией) — отстой. Языковая поддержка типа atomic {} не решает проблемы. Каждый наверное уже обжегся. Многие уже самостоятельно дошли до вывода, что чем меньше разделяемых данных — тем меньше багов. Синхронизации не дожно быть.


Синхронизация -- это неотъемлимая часть окружающего нас мира. И, поскольку программы являются некоторым отражением этого мира, никуда от проблем синхронизации не деться. В той или иной форме синхронизация всегда будет присутствовать (ожидания на мутексах, событиях, условных переменных, механизмах рандеву или получения сообщения).

Мне не доводилось использовать Ada и ее механизм рандеву, но синхронизация на mutex-ах/cond_var-ах не слаще таковой на обмене сообщениями.

Кё>Я думаю все уже придумано (Erlang). Программа делится на мелкие процессы. Чем мельче тем лучше — больше ядер смогут заняться параллельными процессами. Каждый из них ни с кем свои данные не делит в принципе. Для каждого общего ресурса создается процесс-контроллер, с работает с ресурсом только он. Процессы могут передавать друг другу владение над частями своих данных (без копирования памяти то есть). Шедулер создает нужное для текущей системы число потоков, и исполняет эти мелкие процессы в них.


Erlang разрабатывался для достаточно специфических вещей, в которых за мелкими параллельными процессами ходить далеко не нужно было. Поэтому телефонные свитчи на Erlang-е программируются успешно, а вот попробуйте на Erlang-е Emacs или Vim написать -- откуда там взятся мелким процессам?

Задач, которые сейчас решаются с помощью компьютера, вагон и маленькая тележка. И со временем их число стабильно увеличиваться. Поэтому рачитывать на то, что какой-то один инструмент сможет успешно решать их все -- наивно.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.