Haskell提供了一个名为
Haskell似乎没有提供一种方法来生成多个spark,然后等待它们全部完成。这在显式并发中非常简单,但在纯spark中似乎是不可能的。
部分原因或许是因为spark的预期用例。它们似乎是为推测性评估而设计的。也就是说,做一些可能需要但也可能不需要的工作。因此,spark只在其他空闲核心上运行。
然而,这并非我的用例。我有一堆结果,确信很快就会需要它们。如果我开始尝试处理结果之前先启动spark,那么我最终只会单线程运行而且spark也会被烧掉。
当然,如果
有人有什么有用的建议吗?(除了“显式并发”,显然。)
par
的组合器,它会将"spark"排队,以与当前线程可能并行评估。它还提供了一个叫做pseq
的组合器,它强制执行纯代码以按特定顺序进行评估。Haskell似乎没有提供一种方法来生成多个spark,然后等待它们全部完成。这在显式并发中非常简单,但在纯spark中似乎是不可能的。
部分原因或许是因为spark的预期用例。它们似乎是为推测性评估而设计的。也就是说,做一些可能需要但也可能不需要的工作。因此,spark只在其他空闲核心上运行。
然而,这并非我的用例。我有一堆结果,确信很快就会需要它们。如果我开始尝试处理结果之前先启动spark,那么我最终只会单线程运行而且spark也会被烧掉。
当然,如果
par
等待 Sparks完成,它就无法实现任何并行性!但如果有一种方法可以产生多个 spark,然后等待它们全部完成,那将非常有用。但是我找不到任何实现方式。有人有什么有用的建议吗?(除了“显式并发”,显然。)
Par
monad,它虽然不是显式地支持并发,但可以让你显式地等待结果。 - kosmikusPar
monad(顺便说一下,来自 monad-par),它提供了更多关于并行性的具体控制。 - Louis Wasserman-feager-blackholing
编译,可能会没问题。 - John L