Параллелизм - это легко
От: Курилка Россия http://kirya.narod.ru/
Дата: 29.08.06 16:07
Оценка: 4 (1)
Собственно об этом говорит Джо Армстронг, описывая модель многозадачности в Эрланге.

2 Moderators: по-моему эта модель совсем не связана с декларативным характером языка.
Re: Параллелизм - это легко
От: Cyberax Марс  
Дата: 29.08.06 17:12
Оценка:
Курилка wrote:
> Собственно об этом
> <http://armstrongonsoftware.blogspot.com/2006/08/concurrency-is-easy.html&gt;
> говорит Джо Армстронг, описывая модель многозадачности в Эрланге.
> 2 Moderators: по-моему эта модель совсем не связана с декларативным
> характером языка.
Если бы все было так легко...

Модель Эраланга работает нормально только если нет разделения данных. А
если оно есть (например, если несколько потоков работают над одним
большим массивом) — то все становится плохо.

Можно попробовать сделать этот ресурс процессом — но опять получим все
те же проблемы с блокировками, но уже уровнем выше.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[2]: Параллелизм - это легко
От: Курилка Россия http://kirya.narod.ru/
Дата: 29.08.06 18:44
Оценка:
Здравствуйте, Cyberax, Вы писали:


C>Если бы все было так легко...


C>Модель Эраланга работает нормально только если нет разделения данных. А

C>если оно есть (например, если несколько потоков работают над одним
C>большим массивом) — то все становится плохо.

А нельзя переструктурировать приложение таким образом, чтобы не было этого самого разделения?
И можешь сформулировать более приближенную к реальности задачу, которая бы не "втискивалась" в данную модель?

А если ресурс сделать процессом, то разве в Эрланге можно эти блокировки вообще реализовать стандартными способами? Насколько я понимаю посылка сообщений асинхронная и не обязательно гарантированная (хотя я скорей чайник в этом языке )
Re[3]: Параллелизм - это легко
От: AVC Россия  
Дата: 29.08.06 20:01
Оценка:
Здравствуйте, Курилка, Вы писали:

К>А нельзя переструктурировать приложение таким образом, чтобы не было этого самого разделения?


Если можно, в двух словах: как удается в Erlang избегать разделения в принципе?
Ведь, как правило, (хотя бы минимальное) разделение ресурсов имеет место быть.
Например, создаем новый процесс — откусываем ресурс (например, память) от общего пирога.
В то же самое время кто-то также пытается создать процесс.
По идее, надо ставить такие запросы в очередь. Следовательно — опять блокировки, мониторы и т.п.
Как же Erlang без этого обходится?

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

Хоар
Re[4]: Параллелизм - это легко
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 30.08.06 03:05
Оценка:
AVC,

К>>А нельзя переструктурировать приложение таким образом, чтобы не было этого самого разделения?


AVC>Если можно, в двух словах: как удается в Erlang избегать разделения в принципе?

AVC>Ведь, как правило, (хотя бы минимальное) разделение ресурсов имеет место быть.
AVC>Например, создаем новый процесс — откусываем ресурс (например, память) от общего пирога.
AVC>В то же самое время кто-то также пытается создать процесс.
AVC>По идее, надо ставить такие запросы в очередь. Следовательно — опять блокировки, мониторы и т.п.
AVC>Как же Erlang без этого обходится?

dets, mnesia
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[2]: Параллелизм - это легко
От: Banch  
Дата: 30.08.06 08:19
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>если оно есть (например, если несколько потоков работают над одним

C>большим массивом) — то все становится плохо.

как я понял, в Эрланге делается по другому
нужно поделить "работу" на задачи и один процесс будет передавать данные другому для дальнейшей обработки
много процессов могут одновременно обрабатывать разные части большого массива
если процессу нужны данные из части массива которой у него нет, то он заправшивает и/или ждёт когда ему их пришлют

т.е. скорее всего нужна какая-то координация, кто что делает и какие кучки данных обрабатывает
Re[3]: Параллелизм - это легко
От: Курилка Россия http://kirya.narod.ru/
Дата: 30.08.06 08:21
Оценка:
Здравствуйте, Banch, Вы писали:


B>т.е. скорее всего нужна какая-то координация, кто что делает и какие кучки данных обрабатывает


Глянь вот здесь
Автор: Mamut
Дата: 30.08.06
Re[3]: Параллелизм - это легко
От: Cyberax Марс  
Дата: 30.08.06 08:45
Оценка: 1 (1)
Курилка wrote:
> C>Модель Эраланга работает нормально только если нет разделения данных. А
> C>если оно есть (например, если несколько потоков работают над одним
> C>большим массивом) — то все становится плохо.
> А нельзя переструктурировать приложение таким образом, чтобы не было
> этого самого разделения?
> И можешь сформулировать более приближенную к реальности задачу, которая
> бы не "втискивалась" в данную модель?
Есть модель поверхности, она представлена в виде весьма сложной
структуры данных. Модель очень большая (гигабайты), так что стандартный
функциональный подход не проходит.

Разбить на процессы тоже очень сложно — так как поверхность в процессе
обработки сильно меняется.

> А если ресурс сделать процессом, то разве в Эрланге можно эти блокировки

> вообще реализовать стандартными способами? Насколько я понимаю посылка
> сообщений асинхронная и не обязательно гарантированная (хотя я скорей
> чайник в этом языке )
Блокировки делаются просто — делаем потоку два сообщения "lock" и
"unlock". Если поток в состоянии locked, то сообщения от неправильных
клиентов он обрабатывать не будет.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[3]: Параллелизм - это легко
От: Cyberax Марс  
Дата: 30.08.06 08:47
Оценка:
Banch wrote:
> C>если оно есть (например, если несколько потоков работают над одним
> C>большим массивом) — то все становится плохо.
> как я понял, в Эрланге делается по другому
> нужно поделить "работу" на задачи и один процесс будет передавать данные
> другому для дальнейшей обработки
> много процессов могут одновременно обрабатывать разные части большого
> массива если процессу нужны данные из части массива которой у него нет, то он
> заправшивает и/или ждёт когда ему их пришлют
Так нету разделения на "части". В ходе обработки могут потребоваться
элементы из любой части массива.

А в силу своих размеров, массив нельзя копировать.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[4]: Параллелизм - это легко
От: Курилка Россия http://kirya.narod.ru/
Дата: 30.08.06 08:52
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Курилка wrote:

>> C>Модель Эраланга работает нормально только если нет разделения данных. А
>> C>если оно есть (например, если несколько потоков работают над одним
>> C>большим массивом) — то все становится плохо.
>> А нельзя переструктурировать приложение таким образом, чтобы не было
>> этого самого разделения?
>> И можешь сформулировать более приближенную к реальности задачу, которая
>> бы не "втискивалась" в данную модель?
C>Есть модель поверхности, она представлена в виде весьма сложной
C>структуры данных. Модель очень большая (гигабайты), так что стандартный
C>функциональный подход не проходит.

C>Разбить на процессы тоже очень сложно — так как поверхность в процессе

C>обработки сильно меняется.

А на участки эту поверхность совсем не реально поделить, или необходим произвольный доступ для обработки?
Re[5]: Параллелизм - это легко
От: Cyberax Марс  
Дата: 30.08.06 08:57
Оценка:
Курилка wrote:
> C>Разбить на процессы тоже очень сложно — так как поверхность в процессе
> C>обработки сильно меняется.
> А на участки эту поверхность совсем не реально поделить, или необходим
> произвольный доступ для обработки?
Оно и так уже разделено, в несколько уровней (с индексами для доступа к
нужным элементам). Просто, например, алгоритмы поиска разломов запросто
могут полповерхности просмотреть.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[4]: Параллелизм - это легко
От: Banch  
Дата: 30.08.06 09:03
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Так нету разделения на "части". В ходе обработки могут потребоваться

C>элементы из любой части массива.

вот когда понадобяться, тогда и запрашивать их

хотя у меня подозрение, что не углубившись во все тонкости ответить тебе будет нереально
лучше попробуй сам подумать — можно ли как-то разделить задачу на параллельные процессы?
пока не пытаясь оптимизировать скорость и объём памяти до последней копейки
Re[5]: Параллелизм - это легко
От: Cyberax Марс  
Дата: 30.08.06 09:19
Оценка:
Banch wrote:
> C>Так нету разделения на "части". В ходе обработки могут потребоваться
> C>элементы из любой части массива.
> вот когда понадобяться, тогда и запрашивать их
Что запращивать? У меня массив в 10000х10000 точек, с построенными на
нем "индексами" (деревьями, разбивающими массив на зоны по определенным
правилам). А еще из этого массива нужно для визуализации делать выборки
и т.п.

> лучше попробуй сам подумать — можно ли как-то разделить задачу на

> параллельные процессы?
Можно. Сейчас это как раз делаю, но использую совершенно другой подход.

Все потоки имеют прямой доступ к дереву, а для предотвращения конфликтов
используется сложная система многоуровневых блокировок.

> пока не пытаясь оптимизировать скорость и объём памяти до последней копейки

Если не оптимизировать — оно просто работать не будет. Посчитай объем
памяти для такого массивчика.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[6]: Параллелизм - это легко
От: Banch  
Дата: 30.08.06 09:23
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Просто, например, алгоритмы поиска разломов запросто

C>могут полповерхности просмотреть.

может тут подойдёт MapReduce, который в Google применяют?
Re[7]: Параллелизм - это легко
От: Cyberax Марс  
Дата: 30.08.06 10:22
Оценка:
Banch wrote:
> C>Просто, например, алгоритмы поиска разломов запросто
> C>могут полповерхности просмотреть.
> может тут подойдёт MapReduce, который в Google применяют?
Нет. Так как каждый элемент массива сам по себе бессмысленен.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[6]: Параллелизм - это легко
От: Mamut Швеция http://dmitriid.com
Дата: 30.08.06 13:49
Оценка:
>> C>Так нету разделения на "части". В ходе обработки могут потребоваться
>> C>элементы из любой части массива.
>> вот когда понадобяться, тогда и запрашивать их
C>Что запращивать? У меня массив в 10000х10000 точек, с построенными на
C>нем "индексами" (деревьями, разбивающими массив на зоны по определенным
C>правилам). А еще из этого массива нужно для визуализации делать выборки
C>и т.п.

>> лучше попробуй сам подумать — можно ли как-то разделить задачу на

>> параллельные процессы?
C>Можно. Сейчас это как раз делаю, но использую совершенно другой подход.

C>Все потоки имеют прямой доступ к дереву, а для предотвращения конфликтов

C> используется сложная система многоуровневых блокировок.

>> пока не пытаясь оптимизировать скорость и объём памяти до последней копейки

C>Если не оптимизировать — оно просто работать не будет. Посчитай объем
C>памяти для такого массивчика.

Это, по-моему, называется "впихнуть невпихуемое" Возможно, единственным решением такой проблемы таки является "прямой доступ к дереву, а для предотвращения конфликтов используется сложная система многоуровневых блокировок."
... << RSDN@Home 1.2.0 alpha rev. 655>>


dmitriid.comGitHubLinkedIn
Re[7]: Параллелизм - это легко
От: Cyberax Марс  
Дата: 30.08.06 14:54
Оценка:
Mamut wrote:
>> > пока не пытаясь оптимизировать скорость и объём памяти до последней
> копейки
> C>Если не оптимизировать — оно просто работать не будет. Посчитай объем
> C>памяти для такого массивчика.
> Это, по-моему, называется "впихнуть невпихуемое"
Впихиваемое, впихиваемое У меня же работает.

> Возможно, единственным

> решением такой проблемы таки является "прямой доступ к дереву, а для
> предотвращения конфликтов используется сложная система многоуровневых
> блокировок."
Это просто другой способ организации многопоточных приложений, иногда
гораздо более эффективный, чем изолированные процессы.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[5]: Параллелизм - это легко
От: AVC Россия  
Дата: 30.08.06 16:52
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

AVC>>Если можно, в двух словах: как удается в Erlang избегать разделения в принципе?

AVC>>Ведь, как правило, (хотя бы минимальное) разделение ресурсов имеет место быть.
AVC>>Например, создаем новый процесс — откусываем ресурс (например, память) от общего пирога.
AVC>>В то же самое время кто-то также пытается создать процесс.
AVC>>По идее, надо ставить такие запросы в очередь. Следовательно — опять блокировки, мониторы и т.п.
AVC>>Как же Erlang без этого обходится?

LCR>dets, mnesia


Excuse me?

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

Хоар
Re[6]: Параллелизм - это легко
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 31.08.06 04:11
Оценка:
AVC,

LCR>>dets, mnesia


AVC>Excuse me?


Просил же в двух словах

Более подробно:
dets = Distributed Erlang Term Storage
mnesia = Distributed Database (интересное название, а?)
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re: Параллелизм - это легко
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 31.08.06 07:33
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Собственно об этом говорит Джо Армстронг, описывая модель многозадачности в Эрланге.


Мне показалось, что конекретно это сообщение об Erlang-е весьма поверхносное, популистское и в большей степени рекламное. Хотя оно и понятно

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

Так что параллелизм -- это, все таки, не легко.


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