Как «поделиться состоянием» с Erlang Style Concurrency? - PullRequest
3 голосов
/ 23 марта 2009

Эрланг работает с передачей сообщений между актерами в качестве модели параллелизма.

Предположим, у меня есть 3 актера, которые продают предметы . Общее количество предметов составляет 7. Как они точно продают 7 предметов ? Как они координируют себя? У нас может быть один актер с количеством доступных предметов, действующий на сообщения «купить» (актер инвентаря). Это будет SPOF , хотя.

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

(лучше всего без Амдала узкого места)

Ответы [ 3 ]

3 голосов
/ 23 марта 2009

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

Процесс, представляющий доставку, скажет инвентарь, вот 20 новых вещей ...

2 голосов
/ 24 марта 2009

Я бы внедрил серверный процесс, отвечающий за управление запасами, например, используя в качестве бэкенда таблицы dets или Mnesia. Этот процесс может быть частью дерева контроля, поэтому, если оно не будет выполнено, он будет перезапущен автоматически. Мои процессы продавца - 3 актера, которых вы упомянули выше - связываются с этим процессом сервера, запрашивая у них товары, которые они продают Пока товаров достаточно, проблем нет, иначе продавцы получат ответ, что товар распродан, а другой процесс получит информацию о покупке новых.

1 голос
/ 23 марта 2009

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

...