我之前问过一个相关的问题,为什么 OCaml 的线程被认为是“不够”?
不管 ocaml 的线程有多“糟糕”,我注意到一些库说他们可以做真正的线程。
例如,Lwt
Lwt 提供了一个新的选择。它提供了非常轻量级的协作线程;“启动”一个线程是一个非常快的操作,它不需要一个新的堆栈、一个新的进程或其他任何东西。此外,上下文切换非常快。事实上,这很容易,我们将为每个系统调用启动一个线程。组合协作线程将使我们能够编写高度异步的程序。
如果我是对Jane Street
的,那么aync_core也提供了类似的东西。
但我很困惑。做Lwt
或aync_core
提供线程之类的Java threading
?
如果我使用它们,我可以使用多个 cpu 吗?
以什么方式,我可以在 OCaml 中获得“真正的线程”(就像在 Java 中一样)?
编辑
我仍然很困惑。
让我添加一个场景:
我有一个服务器 ( 16 cpu cores
) 和一个服务器应用程序。
服务器应用程序的作用是:
- 它监听请求
- 对于每个请求,它都会启动一个计算任务(假设需要 2 分钟才能完成)
- 当每个任务完成时,任务要么将结果返回给主任务,要么直接将结果发送回客户端
在 Java 中,这很容易。我创建一个线程池,然后对于每个请求,我在该池中创建一个线程。该线程将运行计算任务。这在 Java 中是成熟的,它可以利用 16 个 cpu 内核。我对吗?
所以我的问题是:我可以在 OCaml 中做同样的事情吗?