Модуль Область
module Domain: sig .. end
- Нестабильно. Интерфейс Области может измениться несовместимым образом в будущем.
Области.
См. главу «Параллельное программирование» в руководстве.
type !'a t
Область типа 'a t выполняется независимо, в конечном итоге генерируя результат типа 'a или исключение
val spawn : (unit -> 'a) -> 'a t
spawn f создаёт новую область, которая выполняется параллельно с текущей областью.
-
Возбуждает
Failureесли у программы недостаточно ресурсов для создания другой области.
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-2024 INRIA.
https://ocaml.org/manual/5.2/api/Domain.html