OCaml 代码中使用了 Thread:
let () = print_endline "Hello, World!"
let rec fib_normal (n: int): int =
match n with
| 0 | 1 -> n
| x when x < 0 -> failwith "Negative number!"
| _ -> fib_normal (n - 1) + fib_normal (n - 2)
let () =
let _ = print_endline "With multi-threading:" in
let handle_1 = Thread.create fib_normal 41 in
let handle_2 = Thread.create fib_normal 41 in
Thread.join handle_1; Thread.join handle_2;
let _ = print_endline "Without multi-threading:" in
let _ = fib_normal 41 in let _ = fib_normal 41 in ()
分别使用多线程运行 2 次 fib 函数、顺序执行两次 fib 函数,前者和后者速度上没有区别,CPU 使用率也一直不超过 100%(如果是多线程的计算密集型程序会高于 100%)。
OCaml (< 5.0.0) 标准库的 Thread 是不是和 CPython 的 threading
模块一样由于 GIL 全局锁的存在而不能并行地执行代码?如果是,那么在 5.0.0 版本以前是如何写并行代码的?
(标签里居然没有 OCaml 的选项,随便填一个 #Haskell)
有锁
假多线