From 6c73afbe5b948b37e093996037cd203b32a85c23 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Mon, 10 Jul 2023 11:00:34 -0400 Subject: [PATCH] perf: optimize `Fut.for_` a bit remove intermediate array. --- src/fut.ml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/fut.ml b/src/fut.ml index e998ae32..821a77f0 100644 --- a/src/fut.ml +++ b/src/fut.ml @@ -308,10 +308,12 @@ let wait_list (a : _ t list) : unit t = join_container_ a ~iter:List.iter ~len:List.length ~map:(fun _f _ -> ()) let for_ ~on n f : unit t = - let futs = Array.init n (fun i -> spawn ~on (fun () -> f i)) in join_container_ ~len:(fun () -> n) - ~iter:(fun f () -> Array.iter f futs) + ~iter:(fun yield () -> + for i = 0 to n - 1 do + yield (spawn ~on (fun () -> f i)) + done) ~map:(fun _f () -> ()) ()