模块 Domain

module Domain: sig .. end

域。

参见手册中的“并行编程”章节。

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