2012-08-08 14 views
8

Testowałem ocsigen, który używa Lwta. Sądzę, że Lwt to "Lekka nić", prawda? Jeśli tak, jak możemy to nazwać "lekką wagą"?Czy Lwt oznacza "Wątek Lekki"?

Wygląda na to, że Lwt używa wątku OS, który NIE jest światłem (w porównaniu z Erlangiem i Haskellem).

Proszę rzucić światło na mnie, dzięki!

Odpowiedz

7

documentation page for Lwt mówi:

[LWT] stanowi bardzo lekkich do współpracy przędzy; "Wdrażanie" wątku jest bardzo szybką operacją, nie wymaga nowego stosu, nowego procesu ani niczego innego. Ponadto przełączniki kontekstu są bardzo szybkie. W rzeczywistości jest tak łatwo, że uruchomimy wątek dla każdego wywołania systemowego. Komponowanie wątków współpracy pozwoli nam pisać wysoce asynchroniczne programy.

15

Tak, Lwt oznacza lekkie nici, a nici Lwta są lekkie. Lwt ma model współpracy oparty na wątkach, tylko pojedynczy wątek wątku działa jednocześnie na jednym wątku systemowym, dopóki nie uzyska wyraźnej kontroli. Twoim obowiązkiem jest upewnić się, że twoje obliczenia w końcu ulegną zniszczeniu, w przeciwnym razie inne wątki lwt mogą nigdy nie działać.

Jednak Lwt ma również pool of system threads używany do wykonywania blokujących wywołań systemowych lub delegowania długo działających funkcji, tak aby nie blokowały całego systemu i uniemożliwiały działanie innym wątkom LWT.

Możesz dowiedzieć się więcej o modelu Lwta i jego implementacji w artykule this (który można znaleźć na stronie autora oryginalnego, here).