Lwt는 OCaml용 동시 프로그래밍 라이브러리입니다. 이는 단일 데이터 유형인 promise 를 제공합니다. 이는 미래에 결정될 값입니다. Promise를 생성하면 계산이 생성됩니다. 해당 계산이 I/O인 경우 Lwt는 이를 OCaml 코드와 병렬로 실행합니다.
Promise 생성 및 대기를 포함한 OCaml 코드는 기본적으로 단일 스레드에서 실행되므로 잠금이나 선점에 대해 걱정할 필요가 없습니다. 선택에 따라 별도의 스레드에서 실행될 코드를 분리할 수 있습니다.
다음은 Google 첫 페이지를 요청하고 요청이 5초 내에 완료되지 않으면 실패하는 단순한 Lwt 프로그램입니다.
open Lwt.Syntax
let () =
let request =
let * addresses = Lwt_unix. getaddrinfo " google.com " " 80 " [] in
let google = Lwt_unix. (( List. hd addresses).ai_addr) in
Lwt_io. (with_connection google ( fun ( incoming , outgoing ) ->
let * () = write outgoing " GET / HTTP/1.1 rn " in
let * () = write outgoing " Connection: close rnrn " in
let * response = read incoming in
Lwt. return ( Some response)))
in
let timeout =
let * () = Lwt_unix. sleep 5. in
Lwt. return None
in
match Lwt_main. run ( Lwt. pick [request; timeout]) with
| Some response -> print_string response
| None -> prerr_endline " Request timed out " ; exit 1
(* ocamlfind opt -package lwt.unix -linkpkg example.ml && ./a.out *)
프로그램에서 Lwt_io.write
와 같은 함수는 약속을 생성합니다. let* ... in
구문은 약속이 결정될 때까지 기다리는 데 사용됩니다. in
이후의 코드는 "콜백"에서 실행되도록 예약되어 있습니다. Lwt.pick
경주는 서로 약속하고 가장 먼저 완료한 경주로 행동합니다. Lwt_main.run
전체 약속 계산 네트워크를 강제로 실행합니다. 표시되는 모든 OCaml 코드는 단일 스레드에서 실행되지만 Lwt는 내부적으로 작업자 스레드와 비차단 파일 설명자의 조합을 사용하여 I/O를 수행하는 약속을 병렬로 해결합니다.
Lwt는 Linux, macOS, Windows 및 기타 시스템에서 네이티브 코드로 컴파일됩니다. 또한 js_of_ocaml을 통해 프런트 엔드 및 Node용 JavaScript로 정기적으로 컴파일됩니다.
Lwt에서는,
Lwt
약속을 제공합니다...Lwt_unix
큰 Unix 바인딩이 있습니다. 상위 레벨 모듈 Lwt_io
멋진 I/O 채널을 제공합니다.Lwt_process
하위 프로세스 처리를 위한 것입니다.Lwt_preemptive
시스템 스레드를 생성합니다.Lwt_react
와 같은 다른 도우미도 있습니다. 링크된 매뉴얼 페이지의 목차를 보십시오! libev-dev
또는 libev-devel
이라고 합니다.opam install conf-libev lwt
우리는 현재 Lwt 문서를 개선하기 위해 노력하고 있습니다(엄격하게 매뉴얼을 다시 작성하고 있습니다). 그동안:
참고: 현재 매뉴얼의 대부분은 'a Lwt.t
"경량 스레드" 또는 간단히 "스레드"로 지칭합니다. 이 문제는 새 매뉴얼에서 수정될 예정입니다. 'a Lwt.t
약속이며 시스템이나 선점형 스레드와 아무 관련이 없습니다.
이슈를 열고, Discord 채팅을 방문하고, Discuss.ocaml.org 또는 Stack Overflow에 문의하세요.
릴리스 발표는 Discuss.ocaml.org에서 이루어집니다. "릴리스만"에 대한 저장소를 보는 것도 옵션입니다.
CONTRIBUTING.md
에는 코드 확인 방법, 검토 작동 방법 등과 같은 코드 작업에 대한 팁이 포함되어 있습니다. 코드 베이스에 대한 상위 수준 개요도 있습니다.