Что такое "искра" в Хаскеле - PullRequest
47 голосов
/ 06 июня 2009

Я запутался в понятии "искра"

Это тема в Хаскеле? Или действие порождения новой темы?

Спасибо всем:

Подводя итог, можно сказать, что искры - это не поток, а скорее единица вычислений (задачи по переводу на C # / Java) Так что это Haskell способ реализации параллелизма задач.

Ответы [ 4 ]

91 голосов
/ 06 июня 2009

Искры не являются нитями. forkIO представляет потоки на Haskell (которые отображаются на меньшее количество реальных потоков ОС). Искры создают записи в рабочих очередях для каждого потока, из которых они будут выполнять задачи, выполняемые в случае простоя потока.

В результате искры очень дешевы (их может быть в программе миллиарды, а у вас, вероятно, не будет более миллиона потоков на Haskell и менее десятка потоков ОС на полдюжине ядер).

Думайте об этом так:

spark model

32 голосов
/ 06 июня 2009

См. Нежное введение в Глазго Параллельный Хаскелл.

Параллелизм вводится в GPH комбинатором par, который принимает два аргумента, которые должны оцениваться параллельно. Выражение p `par` e (здесь мы используем нотацию инфиксного оператора Haskell) имеет то же значение, что и e, и не является строгим в своем первом аргументе, то есть bottom `par` e имеет значение e. (bottom обозначает неразрывное или неудачное вычисление.) Его динамическое поведение состоит в том, чтобы указать, что p может быть оценен новым параллельным потоком, а родительский поток продолжает оценку e. Мы говорим, что p было зажжено , и впоследствии может быть создан поток для его оценки, если процессор переходит в режим ожидания. Поскольку поток не обязательно создан, p похож на ленивое будущее .

[Акцент в оригинале]

3 голосов
/ 06 июня 2009

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

0 голосов
/ 16 декабря 2009

Похоже, что это похоже на «задачу» в Intel Threading Building Blocks.

...