[英]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.