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