Lwt означает "легкая нить"?
Я тестировал ocsigen, который использует Lwt. Я думаю, что Lwt означает "легкая нить", верно? Если так, как мы можем назвать это "легким весом"?
Кажется, что Lwt использует поток ОС, который НЕ легок (по сравнению с Эрлангом и Хаскеллом).
Пожалуйста, пролите свет на меня, спасибо!
2 ответа
На странице документации для Lwt написано:
[Lwt] обеспечивает очень легкие кооперативные нити; `` запуск '' потока - это очень быстрая операция, для которой не требуется новый стек, новый процесс или что-либо еще. Более того, переключение контекста происходит очень быстро. На самом деле, это так просто, что мы запускаем поток для каждого системного вызова. А создание совместных потоков позволит нам писать сильно асинхронные программы.
Да, Lwt означает легкие нити, а Lwt легкие. У Lwt есть модель кооперативных потоков, только один поток lwt одновременно работает в одном системном потоке, пока он явно не даст управление. Ваша обязанность - убедиться, что ваши вычисления в конечном итоге приведут к выводу, иначе другие потоки lwt могут никогда не запуститься.
Однако у Lwt также есть пул системных потоков, используемых для выполнения блокирующих системных вызовов или для делегирования ваших долго выполняющихся функций, чтобы они не блокировали всю систему и не позволяли другим потокам lwt работать.
Вы можете узнать больше о модели и реализации Lwt в этой статье (которую вы можете найти на веб-странице оригинального автора здесь).