[ANN] Picos ā€” Interoperable effects based concurrency

Picos is a framework for building interoperable elements such as

  • schedulers that multiplex large numbers of user level fibers to run on a small number of system level threads,
  • mechanisms for managing fibers and for structuring concurrency,
  • communication and synchronization primitives, such as mutexes and condition variables, message queues, STMs, and more, and
  • integrations with low level asynchronous IO systems,

of effects based cooperative concurrent programming models.

16 Likes

Iā€™m happy to announce that Picos version 0.6.0 has been released!

Picos is a systems programming interface between effects based schedulers and concurrent abstractions.

A lot of work has been done on Picos since previous announcements.

You might start on the new minimalist landing page for Picos, which, among other things, allows you to access the documentation of all the released Picos versions.

Also, in case you missed it, a recording of the talk

Picos ā€” Interoperable effects based concurrency

can be found here.

We also held a workshop on concurrency and parallelism at Fun OCaml. You might enjoy trying out the exercise we developed for the workshop.

As, for reasons of dependencies, Picos now comes in no less than 8 packages and multiple libraries, here is a summary of the packages and the libraries inside each package:

  • picos ā€” Picos ā€” Interoperable effects based concurrency

    • picos ā€” A systems programming interface between effects based schedulers and concurrent abstractions
    • picos.domain ā€” Minimalistic domain API available both on OCaml 5 and on OCaml 4
    • picos.thread ā€” Minimalistic thread API available with or without threads.posix
  • picos_mux ā€” Sample schedulers for Picos

    • picos_mux.fifo ā€” Basic single-threaded effects based Picos compatible scheduler for OCaml 5
    • picos_mux.multififo ā€” Basic multi-threaded effects based Picos compatible scheduler for OCaml 5
    • picos_mux.random ā€” Randomized multi-threaded effects based Picos compatible scheduler for OCaml 5
    • picos_mux.thread ā€” Basic Thread based Picos compatible scheduler for OCaml 4
  • picos_std ā€” Sample libraries for Picos

  • picos_io ā€” Asynchronous IO system for Picos

    • picos_io ā€” Basic IO facilities based on OCaml standard libraries for Picos
    • picos_io.select ā€” Basic Unix.select based IO event loop for Picos
    • picos_io.fd ā€” Externally reference counted file descriptors
  • picos_io_cohttp ā€” Cohttp running on Picos IO

    • picos_io_cohttp ā€” Minimalistic Cohttp implementation using Picos_io for Picos
  • picos_lwt ā€” Lwt interface for Picos

    • picos_lwt ā€” Direct style Picos compatible interface to Lwt for OCaml 5
    • picos_lwt.unix ā€” Direct style Picos compatible interface to Lwt with Lwt_unix for OCaml 5
  • picos_aux ā€” Auxiliary libraries for Picos

  • picos_meta ā€” Integration tests for Picos packages

In addition to the above, Moonpool now uses Picos underneath.

And, I almost forgot, there is a ready to be merged PR for Kcas to change it to use Picos. You should be able to try it with an opam pin-depends.

20 Likes