ActorProcess-0.1.0

Feb 27, 2009 10:30

По поводу конкуренции на акторах... Вроде давно уже надо было это сделать:

ActorProcess-0.1.0
Со странички можно скачать cabal-пакет, посмотреть некоторое количество простых примеров, почитать о том, как пользоваться. Ну и получить описание всех функций.

concurrent, haskell, actorprocess

Leave a comment

Comments 34

mibori February 27 2009, 07:52:39 UTC
опс. Поправлю.

Reply

mibori February 27 2009, 08:19:59 UTC
теперь utf-8 должно быть

Reply


lionet February 27 2009, 07:56:48 UTC
delay принимает значение в микросекундах. с точки зрения программиста (человека) лучше это значение иметь в миллисекундах (Int) или в секундах (Double, Fractional):
1. Это понятнее для человека (а секунды в Double - ещё и единица СИ)
2. В эрланге время меряется в миллисекундах. Зачем плодить энтропию?

Reply

mibori February 27 2009, 08:07:01 UTC
В Хаскелле threadDelay :: Int -> IO () принимает значения в микросекундах. Не буду отходить от этого, несмотря на то, что в миллисекундах удобнее.

Reply

lionet February 27 2009, 08:14:46 UTC
Есть какая-то правда в этом. Хотя думаю что delay - это API более высокого уровня, она не обязана 1:1 отображаться на особенности API уровнем ниже.

Reply

mibori February 27 2009, 08:12:03 UTC
delay (и всё, что связано с ожиданием) принимает значение Integer. Оно сработает корректно, если мы вобьём туда значение, превышающее Int.

Reply


antilamer February 27 2009, 21:44:27 UTC
А правда ли, что если скрестить с этим http://www.itu.dk/people/mir/typesafepatterns.pdf , то можно получить selective receive?

Reply

mibori February 28 2009, 08:22:58 UTC
сейчас, то что по ссылке не доступно ( The proxy server could not handle the request GET /people/mir/typesafepatterns.pdf )

ты можешь привести какой-нибудь пример, который действительно критичен к selective receive? Я приблизительно знаю как его сделать, но нужен алгоритм на котором надо это попробовать.

Reply

antilamer February 28 2009, 08:39:22 UTC
Да тот же reader-writer lock. Без поддержки selective receive там приходится организовывать selective receive самостоятельно, и получается не красивый конечный автоматик, а жопа во всей красе; раза в 4 больше кода.

По-моему, selective receive это почти что главная фишка эрланга.

Статья вот http://narod.ru/disk/6168560000/typesafepatterns.pdf.html .

Reply

mibori February 28 2009, 09:08:30 UTC
Спасибо. На статью придется потратить некоторое времени.

Моё решение состоит в использовании spawnDup. Оно создаёт процесс с очередью-клоном от текущего процесса. Если послать сообщение любому из этих двух процессов, то сообщение появится и в соседнем процессе тоже. Когда какой-либо из двух процессов читает у себя сообщение, оно не удалется из очереди соседнего процесса. В результате один процесс может обрабатывать только один паттерн, а другой -- только другой, игнорируя все остальные. Приблизительно получаетя точно такой же эффект.

Но это нужно протестировать, чтобы говорить с уверенностью, что этот способ работает. А также написать какие-нибудь удобные функции для этого. Поэтому я ищу какой-то определенный алгоритм, который бы давал один результат при selective receive, и совершенно другой без него. Reader-writer lock, возможно, хорошая идея.

Reply


nealar February 28 2009, 09:42:01 UTC
Офигительно!
По этой либе можно понять, что такое акторы, не читая заумных статей?

Reply

mibori February 28 2009, 10:01:58 UTC
уж лучше читать :)

просто хочу дать такому способу конкуренции жизнь как альтернативе STM.

Reply

nealar February 28 2009, 10:22:56 UTC
STM, как я её понимаю, это способ синхронизации.

Reply

mibori February 28 2009, 15:46:01 UTC
обмен сообщениями способом синхронизации можно назвать?

Reply


voidex June 25 2009, 21:46:20 UTC
http://github.com/mibori/actorprocess/blob/f046200a4eb5ceb4b37b7a451f26e5d901953277/Control/Process/Delay.hs

Строки 19-22.
Может ли быть (и если нет, то почему) такое, что userError прилетит раньше, чем произойдёт killThread и позже, чем readChan? В таком случае надо значение засунуть обратно в Chan.

Алсо, сам такую же пишу, с selective receive и receiveTimeout с обработкой нуля, но пока не тестировал.

Reply


Leave a comment

Up