Мультитрединг - как победить дракона
Jan. 24th, 2007 06:29 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
1. Semaphores
2. Monitors (conditional variables).
3. Messages, рандеву, remote calls, actors (пока не разобрался, одно ли это и то же концептуально, или есть разница. Вообще, в принципе, больше "слышал звон", чем "в теме". Потихоньку разберусь)
4. transactional memory - несколько дней назад где-то ссылку на это дело подобрал.
Интересно, есть еще что-то неупомянутое?
-----
Upd: собственно, в списке представлена некоторая линия эволюции (хотя линейной эволюции в реальности, видимо, не было в точности) способов "синхронизации", вернее, написания мультитредного кода.
2. Monitors (conditional variables).
3. Messages, рандеву, remote calls, actors (пока не разобрался, одно ли это и то же концептуально, или есть разница. Вообще, в принципе, больше "слышал звон", чем "в теме". Потихоньку разберусь)
4. transactional memory - несколько дней назад где-то ссылку на это дело подобрал.
Интересно, есть еще что-то неупомянутое?
-----
Upd: собственно, в списке представлена некоторая линия эволюции (хотя линейной эволюции в реальности, видимо, не было в точности) способов "синхронизации", вернее, написания мультитредного кода.
то ли еще будет...
Date: 2007-01-24 05:07 pm (UTC)для гуи в .NET - Invoke()
для COM - apartments
ну и всякие стандартные приемчики типа как организовать синглтон в условиях мультитрединга
Re: то ли еще будет...
Date: 2007-01-24 05:20 pm (UTC)no subject
Date: 2007-01-24 05:18 pm (UTC)единственный по-настоящему надёжный вариант — не приставать к дракону вообще.
на крайняк использовать shared memory между процессами, для чётко определённых вещей.
короче: отказаться от модели, в которой shared memory является выбором по умолчанию.
no subject
Date: 2007-01-24 05:30 pm (UTC)Типа передачи сообщений :-) (см. пункт 3)
Собственно, использование общей памяти и не предлагается по умолчанию. Но это не отменяет необходимости параллельного доступа к данным - будь это доступ несколькими тредами в пределах процесса, либо несколькими компьютерами к общей базе данных - проблемы, в общем, по большому счету те же.
no subject
Date: 2007-01-24 05:34 pm (UTC)это очень большой счёт, однако. реляционная база данных — куда более ограниченная формальная модель, нежели оперативная память фон-неймановского компьютера.
no subject
Date: 2007-01-24 05:40 pm (UTC)no subject
Date: 2007-01-24 05:51 pm (UTC)* объявлению параллельного доступа к константным данным простой оптимизацией (то есть с точки зрения семантики клиентского кода, абсолютно параллельно где эти данные сидят: все в одном месте или в виде кучи копий).
* созданию у изменяющего данные кода иллюзии параллельного доступа и чёткой синхронизации (то бишь убиранию параллельности) этого дела "под капотом".
no subject
Date: 2007-01-24 05:56 pm (UTC)Да ради бога. Беда, что вот как убирать произвольные вещи под капот, чтобы они оттуда на очередном повороте не вывалились - не понятно. Не понятно вот это самое - как писать четкую синхронизацию.
no subject
Date: 2007-01-24 05:59 pm (UTC)no subject
Date: 2007-01-24 07:02 pm (UTC)гениальная фишка, на самом деле.
no subject
Date: 2007-01-24 08:37 pm (UTC)Хотя жаль, что в этом случае устареют искуссные и оригинальные способы бега по граблям.
И вообще, всё же кажется мне, что все эти проблемы написания блокирующего (а не транзакционного) мультитрединга было бы правильно загнать в какую-то математическую теорию. Вот в такой вот теории уже не будет практической потребности, как бы.
Вы, кстати, не знакомы вот с этой работой? http://portal.acm.org/citation.cfm?id=808062
no subject
Date: 2007-01-24 09:02 pm (UTC)загнать-то можно (типа CPU + память = такая большая машина состояний, далее везде), толку только с таких теорий. практикующие теоретики (хихи) предпочитают атаковать проблему формализации со стороны упрощения моделей, а не совершенствования теорий — видимо, у них есть на это хорошие причины. :)
> Вы, кстати, не знакомы вот с этой работой?
ой, нет. я на самом деле в математике очень слаб...
no subject
Date: 2007-01-24 09:26 pm (UTC)А как Вам следующее утверждение? Вроде бы, авторы утверждают, что святой грааль мультитрединга уже обнаружен:
Another great thing about [...] channels is that it has a formal
mathematical foundation, namely CSP, CCS, LOTOS and others. These theories provide design rules or guidelines for writing reliable concurrent software. Semaphores and monitors have no formal foundation, they simply work. From CSP there are several programming languages derived
см. далее http://groups.google.com/group/comp.realtime/msg/be9177cdd85c52a6
no subject
Date: 2007-01-24 05:34 pm (UTC)И, кстати, это вообще не доказано :-)
Прогресс-то понимания проблем мультитрединга и изобретения новых парадигм пока налицо. Как знать, может быть когда-нибудь мультитрединг будет просто таким разделом дискретной математики.
no subject
Date: 2007-01-24 05:38 pm (UTC)и тем не менее. :)
no subject
Date: 2007-01-24 05:41 pm (UTC)no subject
Date: 2007-01-24 05:44 pm (UTC)no subject
Date: 2007-01-24 05:46 pm (UTC)no subject
Date: 2007-01-24 05:53 pm (UTC)no subject
Date: 2007-01-24 08:45 pm (UTC)no subject
Date: 2007-01-24 09:06 pm (UTC)вот взять то же ядро юникса: это же очень сложная и чудовищно граблесодержащая вещь — включая и грабли параллельного доступа к общим ресурсам, причём не только к памяти! но экономика предоставляет нам возможность взять готовую реализацию и рассматривать её как чёрный ящик.
no subject
Date: 2007-01-24 05:50 pm (UTC)А то ведь можно сказать, что и программирование вообще страшный дракон, а то, что народ дорос от ассемблеров аж да java (не говоря о лиспах и прочем) никак не мешает программистам стабильно наступать на грабли багов.
Факт, что с помощью трёх циферок сверху можно писать и читать всё более и более сложные вещи, а не просто топтаться на месте.
no subject
Date: 2007-08-08 07:38 pm (UTC)Это хорошая штука, но сама по себе к параллельности отношения не имеет, и зачастую полезна в однопотоковом приложении.
Хотите многопоковость без дедлоков ?:) Это есть у нас - наш апп. сервер как раз это и дает.
В кратце идея - автоматическое превращение вызовов в асинхронные, и автоматическое перенаправление чтений данных с неизменяемых автоматически создаваемых копий. В С++ (первая версия) это было дубль- буферизация, сейчас в .Нет - мусорщик собирает неиспользуемые копии :)
Кстати, транзакции на уровне обьектов (не строчек в ДБ) у нас тоже есть :)