8

我一直在测试使用 Lwt 的 ocsigen。我猜 Lwt 的意思是“轻量级线程”,对吧?如果是这样,我们怎么能称它为“轻量级”?

似乎 Lwt 正在使用不轻量级的操作系统线程(与 Erlang 和 Haskell 相比)。

请大神指点一下,谢谢!

4

2 回答 2

15

是的,Lwt 是指轻量级线程,Lwt 的线程是轻量级的。Lwt 有一个协作线程模型,只有一个 lwt 线程在单个系统线程上同时运行,直到它明确地让出控制权。你有责任确保你的计算最终产生,否则其他 lwt 线程可能永远不会运行。

然而,Lwt 也有一个系统线程池,用于执行阻塞系统调用或委托长时间运行的函数,这样它们就不会阻塞整个系统并阻止其他 lwt 线程运行。

你可以在这篇论文中找到更多关于 Lwt 的模型和实现的信息(你可以在原作者的网页上找到,这里)。

于 2012-08-08T01:26:52.073 回答
8

Lwt的文档页面说:

[Lwt] 提供非常轻量级的协作线程;“启动”一个线程是一个非常快速的操作,它不需要一个新的堆栈、一个新的进程或其他任何东西。此外,上下文切换非常快。事实上,这很容易,我们将为每个系统调用启动一个线程。组合协作线程将使我们能够编写高度异步的程序。

于 2012-08-08T01:33:41.847 回答