什么是Haskell的"火花"

Joh*_*aze 47 parallel-processing multithreading haskell multicore

我对"火花"的概念感到困惑

它是Haskell中的一个线程吗?或者是产生新线程的行为?

谢谢大家:

总而言之,spark不是线程,而是更多的计算单元(将它放在C#/ Java术语中的任务).所以这是实现任务并行性的Haskell方式.

Don*_*art 92

火花不是线程.forkIO介绍了Haskell线程(它映射到更少的实际OS线程).Sparks在每个线程的工作队列中创建条目,如果线程变为空闲,它们将从中执行任务.

因此,火花非常便宜(你可能在程序中有数十亿个,而你可能不会有超过一百万个Haskell线程,而且在六个核心上只有不到十几个OS线程).

可以这样想:

火花模型

  • @phresnel这是我使用inkscape为这个问题创建的原创作品.您的链接实际上使用我的作品而没有归属 - 您可以告诉我查看内容的日期. (43认同)
  • 我知道了; 我大多想知道为什么链接的内容似乎具有更大的分辨率.我没有看日期,谢谢你的澄清:) (4认同)

Apo*_*isp 32

请参阅Glasgow Parallel Haskell的温和介绍.

par组合器在GPH中引入了并行性,它采用两个并行计算的参数.表达式p `par` e(这里我们使用Haskell的中缀运算符表示法)与e第一个参数具有相同的值,并且不严格,即bottom `par` e具有值e.(bottom表示非终止或失败的计算.)它的动态行为是指示p可以由新的并行线程评估,父线程继续评估e.我们说这p已被激发,并且随后可以创建一个线程来评估它是否处理器变为空闲.由于线程不一定是创建的,p因此类似于懒惰的未来.

[重点原创]