From 8c725275166b8464d381b62ee8f8dcf72eb00c9b Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Thu, 8 Jun 2023 14:49:28 -0400 Subject: [PATCH] pool: do some spinning in `run`, not in workers --- src/pool.ml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/pool.ml b/src/pool.ml index 2dc1eb07..4f2eef66 100644 --- a/src/pool.ml +++ b/src/pool.ml @@ -39,7 +39,7 @@ let run (self : t) (f : task) : unit = try (* try each queue with a round-robin initial offset *) - for _retry = 1 to 3 do + for _retry = 1 to 10 do for i = 0 to n_qs - 1 do let q_idx = (i + offset) mod Array.length self.qs in let q = self.qs.(q_idx) in @@ -69,13 +69,11 @@ let worker_thread_ ~on_exn (active : bool A.t) (qs : task Bb_queue.t array) let task = try - for _retry = 1 to 3 do - for i = 0 to num_qs - 1 do - let q = qs.((offset + i) mod num_qs) in - match Bb_queue.try_pop ~force_lock:false q with - | Some f -> raise_notrace (Got_task f) - | None -> () - done + for i = 0 to num_qs - 1 do + let q = qs.((offset + i) mod num_qs) in + match Bb_queue.try_pop ~force_lock:false q with + | Some f -> raise_notrace (Got_task f) + | None -> () done; pop_blocking () with Got_task f -> f