我在球拍组中发现了topic关于创建channel
的性能。如何在OCaml中创建大量的线程?
我想写一个OCaml的版本来测试。
let post (c,x) = Event.sync (Event.send c x);;
let accept c = Event.sync (Event.receive c);;
let get_chan c = let n = accept c in print_int n;print_newline();;
let chan_trans (old_chan, new_chan) =
let s = accept old_chan in
post (new_chan,(s+1));;
let rec whisper count init_val =
let rec aux n chan =
if n >= count then chan
else
let new_chan = Event.new_channel()
in Thread.create chan_trans (chan, new_chan);
aux (n+1) new_chan
in let leftest_chan = Event.new_channel()
in let t0 = Thread.create post (leftest_chan, init_val)
in let rightest_chan = aux 0 leftest_chan
in get_chan rightest_chan;;
whisper 10000 1;;
的问题是,当我测试whisper 1000 1
,它产生1001
按预期方式。然而,当我试图测试whisper 10000 1
,有作为
Fatal error: exception Sys_error("Thread.create: Resource temporarily unavailable")
我用这个命令来编译和运行
ocamlc -thread unix.cma threads.cma -o prog whisper.ml&&./prog -I +threads
也许你想使用LWT http://ocsigen.org/lwt/ – ReyCharles