Concurrent version of List.map in Ocaml
An alternative would be to use a thread pool:
A fixed number of thread is created and each thread pulls and execute a task

Note that threads (from the Thread module) do not run in parallel (they are time-sharing)