Answering a sub question of yours: Indeed the only way to use more than one core in OCaML is to use multiprocessing. If there is a lot of data that needs to be exchanged, it may not be very fast.
That said there is this patched up version (funded by a one off summer of code by Jane street, I think)
I am ok with OCaML not giving its users a threading API but a runtime that executes many of its higher-order functions in parallel would be really nice. Well, higher-order functions and the other parallelism exposed by the functional semantics, with some helpful directives from the user of course.
There's been a lot of projects, of which the ocamlnet/netmulticore and Jane St async's are (I think, but not very confidently) the only current. Others are:
That said there is this patched up version (funded by a one off summer of code by Jane street, I think)
http://www.algo-prog.info/ocmc/
that gives an API for using threads. I am fairly new to OCaML so will not be able to provide details. Another language that I am looking at is Felix
http://felix-lang.org:8080/ (Note the port, its not the one that the search engines will give you).
I am ok with OCaML not giving its users a threading API but a runtime that executes many of its higher-order functions in parallel would be really nice. Well, higher-order functions and the other parallelism exposed by the functional semantics, with some helpful directives from the user of course.