Подтвердить что ты не робот

Что такое "искра" в Haskell

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

Это поток в Haskell? Или это действие нереста новой нити?

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

Итак, чтобы скомпоновать, искры не являются потоками, а больше единиц вычисления (задачи для размещения в терминах С#/Java). Таким образом, Haskell реализует задачу parallelism.

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Подумайте об этом так:

spark model

Ответ 3

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

Ответ 4

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