Spec-Zone.ru › OCaml

Модуль Область

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

Spec-Zone.ru

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