Я задал родственный вопрос до того, почему потоки OCaml считаются "недостаточно"?
Независимо от того, как "плохой" ocaml threading, я замечаю, что некоторые библиотеки говорят, что они могут делать настоящие потоки.
Например, сходница
Lwt предлагает новую альтернативу. Он обеспечивает очень легкие совлокальные потоки; "запуск" потока - очень быстрая операция, для него не требуется новый стек, новый процесс или что-то еще. Более того, коммутаторы контекста очень быстрые. На самом деле, так просто, что мы запустим поток для каждого системного вызова. И составление совлокальных потоков позволит нам писать высокоасинхронные программы.
Также Jane Street
aync_core также предоставляет похожие вещи, если я прав.
Но я совершенно смущен. Lwt
ли Lwt
или aync_core
потоки, такие как Java threading
?
Если я их использую, могу ли я использовать несколько процессоров?
Каким образом можно получить "реальную поточную" (как на Java) в OCaml?
редактировать
Я все еще смущен.
Позвольте мне добавить сценарий:
У меня есть сервер (16 cpu cores
) и серверное приложение.
Что делает серверное приложение:
- Он слушает запросы
- Для каждого запроса он запускает вычислительную задачу (скажем, стоит 2 минуты, чтобы закончить)
- Когда каждая задача заканчивается, задача будет либо вернуть результат обратно в основную, либо просто отправить результат обратно клиенту непосредственно
На Java это очень просто. Я создаю пул потоков, затем для каждого запроса я создаю поток в этом пуле. этот поток будет выполнять вычислительную задачу. Это зрелое Java, и оно может использовать 16 ядер процессора. Я прав?
Поэтому мой вопрос: могу ли я сделать то же самое в OCaml?