From a3d3468b5eb3d67e5409c0a0ca94fd20b8ebdfce Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Sat, 28 Oct 2023 12:29:25 -0400 Subject: [PATCH] feat: add `Moonpool.recommended_thread_count` --- src/moonpool.ml | 2 ++ src/moonpool.mli | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/src/moonpool.ml b/src/moonpool.ml index b4118536..b46bc123 100644 --- a/src/moonpool.ml +++ b/src/moonpool.ml @@ -2,6 +2,8 @@ let start_thread_on_some_domain f x = let did = Random.int (D_pool_.n_domains ()) in D_pool_.run_on_and_wait did (fun () -> Thread.create f x) +let recommended_thread_count () = Domain_.recommended_number () + module Atomic = Atomic_ module Blocking_queue = Bb_queue module Bounded_queue = Bounded_queue diff --git a/src/moonpool.mli b/src/moonpool.mli index b744dc51..4360c6ee 100644 --- a/src/moonpool.mli +++ b/src/moonpool.mli @@ -22,6 +22,12 @@ val start_thread_on_some_domain : ('a -> unit) -> 'a -> Thread.t to run the thread. This ensures that we don't always pick the same domain to run all the various threads needed in an application (timers, event loops, etc.) *) +val recommended_thread_count : unit -> int +(** Number of threads recommended to saturate the CPU. + For IO pools this makes little sense (you might want more threads than + this because many of them will be blocked most of the time). + @since NEXT_RELEASE *) + module Lock = Lock module Fut = Fut module Chan = Chan