Модуль 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