Кратенько.

Jul 19, 2011 01:27

Сперва дам два определения. Они не точные, не претендуют на истину, просто для пояснения, что же я имею в виду ( Read more... )

параллельность, Эрланг, библиотеки, Хаскель

Leave a comment

migmit July 19 2011, 13:22:36 UTC
> Я подумал, что параллелизм позволяет легко совмещать фреймворки.

Континуэйшенов должно хватить.

Reply

swizard July 19 2011, 14:19:11 UTC
> Континуэйшенов должно хватить.

Все правильно, я про это писал статью в ПФП :)

Reply

thesz July 19 2011, 18:51:39 UTC
Даже если два фреймворка событийно-ориентированные?

Reply

swizard July 19 2011, 19:37:19 UTC
Да никаких проблем, хоть три.

Reply

thesz July 19 2011, 20:03:33 UTC
Это не ответ, к сожалению.

Reply

thesz July 19 2011, 18:52:31 UTC
Два событийно-ориентированных фреймворка. Допустим, сеть и графика. Как их соединить продолжениями?

Reply

swizard July 19 2011, 19:44:46 UTC
Через сопрограммы, например.

Единственная проблему я здесь вижу, если подобные фреймворки не поддерживают poll, а оба реализованы через строго блокирующий event loop. Но и эту часть можно обойти с помощью физической многопоточности (в плане реактора только, всю остальную часть реализуем на продолжениях).

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

Reply

thesz July 19 2011, 20:04:19 UTC
>Но и эту часть можно обойти с помощью физической многопоточности (в плане реактора только, всю остальную часть реализуем на продолжениях).

А вот это ответ и он, что удивительно, совпадает с моим мнением.

Reply

thesz July 19 2011, 20:06:48 UTC
Поток в Хаскеле был 75 слов несколько лет назад.

Народ вполне запускает миллионы потоков без проблем с производительностью.

Reply

migmit July 20 2011, 05:44:24 UTC
Ну, как обычно такие фреймворки делаются? Мы предоставляем ему коллбэк (возможно, не один - ну дык у нас на то ADT имеются), а он его время от времени дёргает:
function callback(request) {
... // create a suitable responce somehow
return responce;
}
function main() {
...
exitCode = runFramework(callback);
... // job is done
}(язык, само собой, абстрактный, C-подобный).

Допустим теперь, что в языке есть континуэйшены. Пишем:
var kOut, kIn;
function callback(request) {
return callCC k {
kIn = k;
kOut(Left(request));
}
}
function initFramework() {
return callCC k {
kOut = k;
exitCode = runFramework(callback);
return Right(exitCode);
}
}
function stepFramework(responce) {
return callCC k {
kOut = k;
kIn(responce);
}
}
function main() {
...
result = initFramework();
while(true) {
switch(result) {
case Left(request):
... // create a suitable responce somehow
result = stepFramework(responce);
case Right(exitCode):
... // job is done
}
}
}И шо ( ... )

Reply

migmit July 20 2011, 05:52:07 UTC
s/return Right(exitCode)/kOut(Right(exitCode))/

Так будет лучше.

Reply

migmit July 20 2011, 05:57:43 UTC
Кстати, то, о чём ты говоришь - это таки не параллелизм, это многопоточность.

Reply

thesz July 20 2011, 07:37:30 UTC
Да, согласен.

Reply

thesz July 20 2011, 07:36:12 UTC
>В чём catch? В том, что callCC - это эффект. Причём, эффект, в IO отсутствующий.

Вообще-то, там ещё две переменные, если тебе зрение callCC застил.

Reply

migmit July 20 2011, 10:59:21 UTC
Эм-м-м... и что, собственно?

Запись и чтение переменных - эффект, в IO наличествующий, а потому его можно и не учитывать.

Reply


Leave a comment

Up