Joh*_*aze 47 parallel-processing multithreading haskell multicore
我对"火花"的概念感到困惑
它是Haskell中的一个线程吗?或者是产生新线程的行为?
谢谢大家:
总而言之,spark不是线程,而是更多的计算单元(将它放在C#/ Java术语中的任务).所以这是实现任务并行性的Haskell方式.
Don*_*art 92
火花不是线程.forkIO介绍了Haskell线程(它映射到更少的实际OS线程).Sparks在每个线程的工作队列中创建条目,如果线程变为空闲,它们将从中执行任务.
因此,火花非常便宜(你可能在程序中有数十亿个,而你可能不会有超过一百万个Haskell线程,而且在六个核心上只有不到十几个OS线程).
可以这样想:

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