15

似乎很多人都在说 OCaml 没有很好的并发能力,也不适合 Web 服务器应用程序。

我目前正在学习 ocaml 的手册。OCaml 现在似乎提供了并发性。

我可以知道为什么 OCaml 的并发/线程被认为是不好的吗?

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

4

2 回答 2

21

请参阅并发与并行 - 有什么区别?. OCaml 的线程提供并发性,因为您可以在前一个函数完成之前启动下一个函数。但是 OCaml 不提供并行性,所以当第二个函数启动时,第一个函数必须暂停。两个线程不能同时运行,因此一个进程中的多个 CPU 密集型计算将相互阻塞,并且您无法在一个进程中最大化所有 CPU 内核。

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

于 2013-05-02T17:34:55.373 回答
10

OCaml 支持多线程的使用。但是只有一个 ocaml 线程可以在给定的时间点运行,不同的 ocaml 线程永远不会并行。

然而:

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

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

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

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

于 2013-05-02T16:46:18.730 回答