模組 Stdlib.Domain

module Domain: Domain

網域(Domains)。

請參閱手冊中的「平行程式設計」章節。

type !'a t 

類型為 'a t 的網域會獨立執行,最終產生類型為 'a 的結果,或一個例外。

val spawn : (unit -> 'a) -> 'a t

spawn f 會建立一個新的網域,與目前的網域平行執行。

val join : 'a t -> 'a

join d 會阻塞直到網域 d 執行完成。如果 d 產生一個值,則該值會由 join d 返回。如果 d 引發一個未捕獲的例外,則該例外會由 join d 重新引發。

type id = private int 

網域具有唯一的整數識別碼。

val get_id : 'a t -> id

get_id d 會返回網域 d 的識別碼。

val self : unit -> id

self () 是目前執行中網域的識別碼。

val before_first_spawn : (unit -> unit) -> unit

before_first_spawn f 會註冊 f,使其在程式產生第一個網域之前被呼叫。使用 before_first_spawn 註冊的函數會在主(初始)網域上呼叫。使用 before_first_spawn 註冊的函數會按照「先進先出」的順序呼叫:最先使用 before_first_spawn 新增的函數會最先被呼叫。

val at_exit : (unit -> unit) -> unit

at_exit f 會註冊 f,使其在目前的網域退出時被呼叫。請注意,at_exit 回呼是網域本地的,僅適用於呼叫網域。註冊的函數會按照「後進先出」的順序呼叫:最近使用 at_exit 新增的函數會最先被呼叫。一個例子

let temp_file_key = Domain.DLS.new_key (fun _ ->
  let tmp = snd (Filename.open_temp_file "" "") in
  Domain.at_exit (fun () -> close_out_noerr tmp);
  tmp)
    

上面的程式碼片段會建立一個鍵,該鍵第一次被檢索時會開啟一個臨時檔案並註冊一個 at_exit 回呼來關閉它,從而保證在目前的網域退出的情況下描述符不會洩漏。

val cpu_relax : unit -> unit

如果忙碌等待,在迭代之間呼叫 cpu_relax () 將會改善某些 CPU 架構的效能。

val is_main_domain : unit -> bool

is_main_domain () 如果是從初始網域呼叫,則返回 true。

val recommended_domain_count : unit -> int

建議同時執行的最大網域數(包括已經在執行的網域)。

返回的值至少為 1

module DLS: sig .. end