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

Jac*_*ale 14 ocaml functional-programming

似乎很多人都说OCaml没有很好的并发能力,对Web服务器应用程序来说也不好.

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

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

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

Chu*_*uck 20

请参阅并发与并行 - 有什么区别?.OCaml的线程提供并发性,因为您可以在上一个函数完成之前启动下一个函数.但OCaml不提供并行性,所以当第二个函数启动时,第一个函数必须被置于保持状态.两个线程无法同时运行,因此进程中的多个CPU绑定计算将相互阻塞,并且您无法在一个进程中最大化所有CPU核心.

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

  • @JacksonTale:您运行一组Node进程以充分利用多个CPU核心. (5认同)
  • @JacksonTale - 也许你应该把它作为一个问题发布,而不是在评论中追求这个切线.[但是,在你这样做之前,请先阅读这个问题及其答案.](http://stackoverflow.com/questions/2387724/node-js-on-multi-core-machines) (3认同)
  • 哦,Node.js是单线程的吗?但是Node.js如何利用多个cpu? (2认同)

raf*_*fix 9

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

然而:

  • 你可以分叉/使用多个进程.

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

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

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