2012-08-08 21 views
8

我一直在測試使用Lwt的ocsigen。我猜Lwt的意思是「輕量級線程」,對不對?如果是這樣,我們怎麼稱之爲「輕量級」?Lwt是否意味着「輕量級線程」?

看來Lwt使用OS的線程不輕(與Erlang和Haskell相比)。

請大家指點一下,謝謝!

回答

7

documentation page for Lwt的說:

[LWT]提供了非常輕重量的合作線程; ``啓動''一個線程是一個非常快速的操作,它不需要一個新的堆棧,一個新的進程或其他任何東西。而且上下文切換非常快。事實上,我們將爲每個系統調用啓動一個線程,這非常簡單。編寫合作線程將允許我們編寫高度異步的程序。

15

是的,Lwt意味着輕量級線程和Lwt線程輕。 Lwt有一個協作式線程模型,只有一個lwt線程同時在一個系統線程上運行,直到它明確地產生控制。這是你的責任,以確保你的計算最終產生否則其他lwt線程可能永遠不會運行。

但是Lwt也有一個pool of system threads用於執行阻塞系統調用或委託你的長時間運行的函數,以便它們不會阻塞整個系統並阻止其他lwt線程運行。

您可以在this論文中找到更多關於Lwt的模型和實現的信息(您可以在原作者的網頁上找到here)。