[英]does multithread conflict with Map in F#
let len = 25000000
let map = Map.ofArray[|for i =1 to len do yield (i,i+1)|]
let maparr = [|map;map;map;map|]
let f1 i =
for i1 =1 to len do
let l1 = maparr.[i-1].Item(i1)
()
let index = [|1..4|]
let _ = index |> Array.Parallel.map f1
printf "done"
我发现上面的代码仅是一个全速工作的内核。 但是我唯一的例外是所有四个线程正在一起使用较高水平的cpu。 因此,似乎与Map有多线程冲突,对吗? 如果没有,怎么能达到我的最初目标? 先感谢您
因此,我认为您是在尝试一种启发式方法,即库假设只有少量任务时,仅使用单个线程会更快。
此代码使我的计算机上的所有线程数最大化:
let len = 1000000
let map = Map.ofArray[|for i =1 to len do yield (i,i+1)|]
let maparr = [|map;map;map;map|]
let f1 (m:Map<_,_>) =
let mutable sum = 0
for i1 =1 to len do
let l1 = m.Item(i1)
for i = 1 to 10000 do
sum <- sum + 1
printfn "%i" sum
let index = [|1..40|]
printfn "starting"
index |> Array.map (fun t -> maparr.[(t-1)/10]) |> Array.Parallel.iter f1
printf "done"
重要更改:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.