Eio
Effects based parallel IO for OCaml.
Eio provides support for concurrency (juggling many tasks) and parallelism (using multiple CPU cores for performance).
It provides facilities for creating and coordinating fibers (light-weight threads) and domains (for parallel processing), as well as interfaces for interacting with resources provided by the operating system.
These features must be used within an event loop, provided by an Eio backend. Applications can use Eio_main
.run to run a suitable loop.
See https://github.com/ocaml-multicore/eio for a tutorial.
module Switch : sig ... end
Grouping fibers and other resources so they can be turned off together.
module Promise : sig ... end
A promise is a placeholder for result that will arrive in the future.
module Fiber : sig ... end
A fiber is a light-weight thread.
module Semaphore : sig ... end
A counting semaphore.
module Mutex : sig ... end
Mutual exclusion.
module Condition : sig ... end
Waiting for a condition to become true.
module Stream : sig ... end
A stream/queue.
module Cancel : sig ... end
Cancelling fibers.
module Std : sig ... end
Commonly used standard features. This module is intended to be open
ed.
The general pattern here is that each type of resource has a set of functions for using it, plus an object type to allow defining your own implementations. To use the resources, it is recommended that you use the functions rather than calling methods directly. Using the functions results in better error messages from the compiler, and may provide extra features or sanity checks.
The system resources are available from the Stdenv.t
provided by your event loop (e.g. Eio_main
.run).
module Generic : sig ... end
A base class for objects that can be queried at runtime for extra features.
module Flow : sig ... end
Byte streams.
module Buf_read : sig ... end
Buffered input and parsing
module Buf_write : sig ... end
Buffered output
module Net : sig ... end
Networking.
module Domain_manager : sig ... end
Parallel computation across multiple CPU cores.
module Time : sig ... end
Clocks, time, sleeping and timeouts.
module File : sig ... end
Operations on open files.
module Fs : sig ... end
File-system types.
module Path : sig ... end
Accessing paths on a file-system.
module Debug : sig ... end
Control over debugging.
module Stdenv : sig ... end
The standard environment of a process.
exception Io of Exn.err * Exn.context
val traceln :
?__POS__:(string * int * int * int) ->
('a, Stdlib.Format.formatter, unit, unit) Stdlib.format4 ->
'a
traceln fmt
outputs a debug message (typically to stderr).
Trace messages are printed by default and do not require logging to be configured first. The message is printed with a newline, and is flushed automatically. traceln
is intended for quick debugging rather than for production code.
Unlike most Eio operations, traceln
will never switch to another fiber; if the OS is not ready to accept the message then the whole domain waits.
It is safe to call traceln
from multiple domains at the same time. Each line will be written atomically.
Examples:
traceln "x = %d" x;
traceln "x = %d" x ~__POS__; (* With location information *)
module Exn : sig ... end
Eio exceptions.
module Private : sig ... end
API for use by the scheduler implementation.