package eio

  1. Overview
  2. Docs

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.

Concurrency primitives

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 opened.

Cross-platform OS API

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.

Errors and Debugging

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 *)
  • parameter __POS__

    Display __POS__ as the location of the traceln call.

module Exn : sig ... end

Eio exceptions.

Provider API for OS schedulers

module Private : sig ... end

API for use by the scheduler implementation.