The canonical way to do concurrency these days is with a monadic library like Lwt or Async, which is a mechanism akin to promises&#x2F;deferreds. They have their own implementations of channels&#x2F;events&#x2F;streams&#x2F;what-call-you-it.<p>There is some interesting work being done on an effects system [1] which would be another option for type-safe concurrency, hopefully it will land soon alongside the multicore work.<p>There is also the old fashioned way with the stdlib&#x27;s Event module[2] (in conjunction with Thread), but that&#x27;s not used as often, mostly because Lwt&#x2F;Async offer richer, safer abstractions.<p>[1] <a href="http:&#x2F;&#x2F;kcsrk.info&#x2F;ocaml&#x2F;multicore&#x2F;2015&#x2F;05&#x2F;20&#x2F;effects-multicore&#x2F;" rel="nofollow">http:&#x2F;&#x2F;kcsrk.info&#x2F;ocaml&#x2F;multicore&#x2F;2015&#x2F;05&#x2F;20&#x2F;effects-multico...</a><p>[2]  <a href="http:&#x2F;&#x2F;caml.inria.fr&#x2F;pub&#x2F;docs&#x2F;manual-ocaml&#x2F;libref&#x2F;Event.html" rel="nofollow">http:&#x2F;&#x2F;caml.inria.fr&#x2F;pub&#x2F;docs&#x2F;manual-ocaml&#x2F;libref&#x2F;Event.html</a>