Haskell. Erlang-style process communication.

Apr 10, 2008 15:52

Посмотрев на реализацию Erlang-style Distributed Haskell захотелось нарисовать что-то своё, простое, для коммуникации процессов внутри одного исходника. Получился достаточно небольшой модуль:

Process.hs )

haskell, erlang

Leave a comment

Comments 31

(The comment has been removed)

mibori April 10 2008, 14:27:15 UTC
Да, если дело надо сделать быстрее, бери Эрланг не задумываясь

см. примеры на http://community.livejournal.com/ru_lambda/81733.html

Reply

antilamer April 10 2008, 18:43:33 UTC
А ведь concurrency у хаскелла, по слухам, еще резвее, чем у эрланга.
http://shootout.alioth.debian.org/gp4/benchmark.php?test=threadring&lang=all
http://shootout.alioth.debian.org/gp4/benchmark.php?test=chameneosredux&lang=all

Reply

(The comment has been removed)


(The comment has been removed)

mibori April 10 2008, 14:22:36 UTC
давай.
убьёшь, если вдруг стану много не по теме постить.

Reply


nealar April 15 2008, 11:56:10 UTC
Неделю медитировал над твоим кодом, хотел взять для одной штуковины как есть - уж очень всё красивое. Сегодня просветлился, сделаю чуть по-другому. Спасибо!

Reply

mibori April 17 2008, 20:21:45 UTC
для одной штуковины
а что за штуковина, если не секрет (просто интересно ввиду малого количества показательных примеров)

сделаю чуть по-другому
wow, что я упустил? :)

Reply

nealar April 19 2008, 22:19:30 UTC
Штуковина такая: отлаживаю одну хреновину, которая лазает по HTTP, сеть тормозная дико - анлим, что с него взять. Поэтому хочу повесить тред, который будет сетевые запросы гонять, и швырять в него функциями, которые в сеть лазают. А сам параллельно висеть в GHCi.
По-другому сделаю потому что мне не нужен полноценный Эрланг, стандартного Chan должно хватить для всего. Просто пару недель назад я не знал о существовании такой библиотеки. А нормально запустить параллельность ещё и сегодня не получается. :)

Reply

mibori April 20 2008, 06:11:39 UTC
А нормально запустить параллельность ещё и сегодня не получается.
А у тебя те треды, которые собственно коннектятся, через forkOS пускаются? (иначе у тебя каждый foreign unsafe-вызов (считай, коннект к серваку) будет блокировать все другие треды).

Reply


rvp74 February 27 2009, 08:20:06 UTC
> За эрланговскими конструкциями receive ... end и receive ... after ... end не гнался.

Кстати, да. У Эрланга логика приема сильно отличается от простой очереди сообщений.

Reply

mibori February 27 2009, 09:24:55 UTC
Верно.
Логику, как у Эрланга можно реализовать самостоятельно:
1. Принять сообщение через recv, recvDelay, recvMaybe
2. Если сообщение не подошло, то вернуть его обратно в очередь через sendMe, sendMeBack

Reply

rvp74 February 27 2009, 11:00:17 UTC
Если возвращать в очередь сообщение то порядок его в очереди будет другой. А в Эрланге порядок насколько я помню важен.

Reply

mibori February 27 2009, 11:38:23 UTC
неа

sendMe плюхнет сообщение в очередь сверху (как обычно)
А sendMeBack -- плюхнет снизу, откуда оно было вытащено recv. sendMeBack для того и задумывалась, чтобы сохранять порядок в очереди, если нужно вытащить только определенное сообщение.

Reply


Leave a comment

Up