Почему потоки OCaml считаются "недостаточно"?

Кажется, многие люди говорят, что OCaml не обладает хорошей способностью к параллелизму, а также не подходит для приложений веб-серверов.

В настоящее время я изучаю руководство ocaml. Кажется, что OCaml теперь обеспечивает параллелизм.

Могу ли я узнать, почему параллелизм/потоки OCaml считается плохим?

Могу ли я разработать серверное приложение в OCaml? С какими проблемами я могу встретиться?

Ответ 1

См. Параллелизм против параллелизма. Какая разница? , Темы OCaml предлагают параллелизм, так как вы можете запустить следующий запуск до того, как предыдущий будет завершен. Но OCaml не предлагает параллелизма, поэтому, когда эта вторая функция начинается, первая должна быть приостановлена. Два потока не могут запускаться одновременно, поэтому несколько вычислений, связанных с процессором в процессе, будут блокировать друг друга, и вы не сможете максимизировать все ваши ядра процессора в одном процессе.

Это говядина с потоками OCaml. Означает ли это, что вы не можете использовать OCaml для чего-то вроде сервера? Нет. Это то, что вам нужно будет учитывать в дизайне вашего сервера, но это, как правило, не showstopper. Heck, Node.js является прямым однопоточным, но его основной целью является создание серверов.

Ответ 2

OCaml поддерживает использование нескольких потоков. Но только одна ocaml-нить может работать в данный момент времени, никогда не бывает parellelism различных потоков ocaml.

Однако:

  • вы можете использовать fork/use несколько процессов.

  • внешний код (например, внешние библиотеки c/С++) могут выполняться параллельно, если их взаимодействие с исполняемой средой ocaml правильно контролируется.

PS: Связанный документ - это не руководство ocaml. Это хорошая, но датированная книга о OCaml.

Приложение. Конечно, вы можете создавать серверы в ocaml (живой пример: ocsigen - веб-сервер). Это зависит от ваших потребностей, если отсутствие реальной контрреальности потоков является особенностью или недостатком.