Распараллеливание кода, связанного с вычислениями, такого как сортировка, следует выполнять скорее с Array.Parallel.map
вместо Async.Parallel
, что предназначено для повышения пропускной способности кода, связанного с вводом-выводом.
Вы можете распараллелить вашу функцию какследует с Array.Parallel.map
.
let rec quicksort (list: int list) =
match list with
| [] -> [] /
| pivot :: tail ->
let lower, upper = List.partition (fun x -> x < pivot) tail
let sortedArrays = Array.Parallel.map quicksort [| lower; upper |]
sortedArrays.[0] @ [pivot] @ sortedArrays.[1]
Однако вам НЕ следует этого делать, потому что издержки распараллеливания намного выше, чем выгода распараллеливания, а распараллеленная версия на самом деле намного медленнее.
Если вы хотите ускорить алгоритм быстрой сортировки, можно добиться наибольшего выигрыша, избегая выделения объектов (списков) во время алгоритма.Использование массива и изменение его на месте - вот путь:)