Ja zapytałem powiązane pytanie przed Why OCaml's threading is considered as `not enough`?Jakie biblioteki należy użyć, aby uzyskać lepszą obróbkę OCaml?
Nieważne jak nawlekanie „zły” SML jest, zauważyłem niektóre biblioteki powiedzieć można zrobić prawdziwe wątków.
Na przykład Dwójki
Dwójki oferuje nową alternatywę. Zapewnia bardzo lekkie, wspólne nitki; "uruchamianie" 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ółpracujących pozwoli nam pisać wysoce asynchroniczne programy .
także zapewnia Jane Street
„s aync_core również podobne rzeczy, jeśli mam rację.
Ale jestem bardzo zdezorientowany. Czy Lwt
lub aync_core
udostępniają wątki takie jak Java threading
?
Jeśli używam ich, czy mogę korzystać z wielu procesorów?
W jaki sposób mogę uzyskać "prawdziwy wątek" (podobnie jak w Javie) w OCaml?
Edit
nadal jestem zdezorientowany.
Dodam scenariusz:
Mam serwer (16 cpu cores
) oraz aplikacji serwera.
Co robi aplikacja serwera to:
- on słucha żąda
- Dla każdego żądania, zaczyna obliczeniowej zadania (powiedzmy kosztuje 2 minuty do mety)
- Kiedy każde zadanie zakończy, zadaniem będzie albo zwrócić wynik z powrotem do głównego lub po prostu wysłać wynik z powrotem do klienta bezpośrednio
W Javie jest to bardzo łatwe. Tworzę pulę wątków, a następnie dla każdego żądania utworzę wątek w tej puli. ten wątek uruchomi zadanie obliczeniowe. To jest dojrzałe w Javie i może wykorzystywać 16 rdzeni procesorów. Czy mam rację?
Moje pytanie brzmi: czy mogę zrobić to samo w OCaml?
Uważam, że powinno być możliwe wykorzystanie urządzeń gwintujących JVM z portem ocaml do tej platformy, ale jeszcze tego nie próbowałem. – didierc