parallel-processing - F#如何并行做List.map

标签 parallel-processing f#

在标准 F# 库中并行运行以下代码的最轻量级、最简洁的方法是什么?或者没有任何广泛使用的附加库?

let newlist = oldlist |> List.map myComplexFunction

我能找到的最好的是

let newlist = oldlist |> List.map (fun x -> async { return myComplexFunction x }
                      |> Async.Parallel 
                      |> Async.RunSynchronously
                      |> Array.toList

我不喜欢这样,因为它有 4 行长,并且构造了一个数组,然后我必须将其重新生成一个列表。如果我使用数组,它会很简单,Array.parallel,但我想保持那个可爱的不可变列表功能的纯粹性。我简直不敢相信没有替代 list ,但到目前为止一直找不到。 有什么好的建议吗?

最佳答案

使用 PSeq 模块:

open Microsoft.FSharp.Collections

let newlist = 
    oldlist 
    |> PSeq.map myComplexFunction
    |> PSeq.toList

关于parallel-processing - F#如何并行做List.map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30246799/

相关文章:

linux - 同时对同一个文件应用不同的哈希算法

mysql - 将数据并发插入 MySQL 的更快方法

c# - Interlocked.Increment() 没有按照我在任务并行库中期望的方式工作

python - 使用 Python Multiprocessing 的令人尴尬的并行任务的预期加速

f# - Floyd Warshall 使用 Alea GPU

asynchronous - 为什么要嵌套异步计算?

wpf - F# WPF 设置自定义程序集标题

types - "This expression was expected to have type unit"但我希望它是 bool 值

f# - SUAVE 产品是否准备好用于具有数百万用户流量的 Web 应用程序开发?

c# - Parallel.ForEach 错误行为