Spec-Zone.ru › OCaml 5.0

Модуль Domain

module Domain: sig .. end
  • Нестабильно. Интерфейс Domain может измениться несовместимым способом в будущем.

Домены.

См. главу «Параллельное программирование» в руководстве.

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, вызывается первой.

  • Возбуждает Invalid_argument если программа уже запустила домен.
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() между итерациями улучшит производительность на некоторых архитектурах процессоров

val is_main_domain : unit -> bool

is_main_domain () возвращает true, если вызывается из начального домена.

val recommended_domain_count : unit -> int

Рекомендуемое максимальное количество доменов, которые должны выполняться одновременно (включая уже запущенные домены).

Возвращаемое значение не меньше 1.

module DLS: sig .. end

© 1995-2022 INRIA.
https://v2.ocaml.org/releases/5.0/htmlman/libref/Domain.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API