По поводу конкуренции на акторах... Вроде давно уже надо было это сделать:
ActorProcess-0.1.0Со странички можно скачать cabal-пакет, посмотреть некоторое количество простых примеров, почитать о том, как пользоваться. Ну и получить описание всех функций.
Comments 34
KOI-8?! Почему не UTF-8?
Reply
Reply
Reply
1. Это понятнее для человека (а секунды в Double - ещё и единица СИ)
2. В эрланге время меряется в миллисекундах. Зачем плодить энтропию?
Reply
Reply
Reply
Reply
Reply
ты можешь привести какой-нибудь пример, который действительно критичен к selective receive? Я приблизительно знаю как его сделать, но нужен алгоритм на котором надо это попробовать.
Reply
По-моему, selective receive это почти что главная фишка эрланга.
Статья вот http://narod.ru/disk/6168560000/typesafepatterns.pdf.html .
Reply
Моё решение состоит в использовании spawnDup. Оно создаёт процесс с очередью-клоном от текущего процесса. Если послать сообщение любому из этих двух процессов, то сообщение появится и в соседнем процессе тоже. Когда какой-либо из двух процессов читает у себя сообщение, оно не удалется из очереди соседнего процесса. В результате один процесс может обрабатывать только один паттерн, а другой -- только другой, игнорируя все остальные. Приблизительно получаетя точно такой же эффект.
Но это нужно протестировать, чтобы говорить с уверенностью, что этот способ работает. А также написать какие-нибудь удобные функции для этого. Поэтому я ищу какой-то определенный алгоритм, который бы давал один результат при selective receive, и совершенно другой без него. Reader-writer lock, возможно, хорошая идея.
Reply
По этой либе можно понять, что такое акторы, не читая заумных статей?
Reply
просто хочу дать такому способу конкуренции жизнь как альтернативе STM.
Reply
Reply
Reply
Строки 19-22.
Может ли быть (и если нет, то почему) такое, что userError прилетит раньше, чем произойдёт killThread и позже, чем readChan? В таком случае надо значение засунуть обратно в Chan.
Алсо, сам такую же пишу, с selective receive и receiveTimeout с обработкой нуля, но пока не тестировал.
Reply
Leave a comment