¿La construcción "Async.Parallel" realmente ayuda a hacer cálculos más rápidos en un sistema multi-core? ¿Las "Tareas" .NET TPL están involucradas aquí de alguna manera?¿F # Async.Parallel acelera los cálculos?
open System;
let key = Console.ReadKey(true);
let start = System.DateTime.Now
let pmap f l = seq { for a in l do yield async {return f a} } |> Async.Parallel |> Async.RunSynchronously
let map f l = seq {for a in l do yield f a}
let work f l =
match key.KeyChar with
| '1' -> pmap f l
| '2' -> Seq.toArray (map f l)
| _ -> [||]
let result = work (fun x -> (x * x)/75) (seq { 1 .. 100000*3})
let endtime = DateTime.Now - start
printfn "%A"endtime;
let pause = Console.ReadKey(true);
Supongo que algunos de ustedes lo explicarán teóricamente, pero también agradeceré algunas pruebas del mundo real.
Con la secuencia reforzada hasta 60000000, se ejecuta 10 segundos con el mapa y se bloquea con la falta de memoria en pmap después de 40 segundos más o menos. Ambas versiones utilizan solo uno de mis dos núcleos. Ahora necesito un F # gurú para explicar esto :-) – TToni