为什么OCaml的线程被认为是“不够”?

时间:2013-05-02 16:11:11

标签: functional-programming ocaml

似乎很多人都说OCaml并不具备良好的并发能力,对Web服务器应用也不利。

我目前正在学习ocaml's manual。看来OCaml现在提供了并发性。

我能知道为什么OCaml的并发/线程被认为是坏的吗?

我可以在OCaml中开发服务器应用程序吗?我可以遇到什么问题?

2 个答案:

答案 0 :(得分:18)

Concurrency vs. parallelism — What's the difference?。 OCaml的线程提供并发性,因为您可以在上一个函数完成之前启动下一个函数。但OCaml不提供并行性,所以当第二个函数启动时,第一个函数必须被置于保持状态。两个线程不能同时运行,因此进程中的多个CPU绑定计算将相互阻塞,并且您无法在一个进程中最大化所有CPU核心。

人们对OCaml的线程感到满意。这是否意味着您不能将OCaml用于服务器之类的东西?不,这是您在服务器设计中必须考虑的事情,但它通常不是一个显示器。哎呀,Node.js是直接单线程的,但其主要目的是创建服务器。

答案 1 :(得分:9)

OCaml支持使用多个线程。但是只有一个ocaml线程可以在给定的时间点运行,从来没有不同的ocaml线程的parellelism。

然而:

  • 您可以分叉/使用多个流程。

  • 外部代码(例如外部c / c ++ - 库)可以并行运行,只要它们与ocaml运行时的交互得到适当控制。

PS:链接文档不是ocaml手册。这是一本关于OCaml的好书但却过时的书。

附录: 当然,您可以在ocaml中开发服务器(实例:ocsigen - a web server)。 这取决于你的需求,如果缺乏真正的线程concurreny是一个功能或缺点。