LINUX.ORG.RU

Вопрос по многопоточности в OCaml

 


1

2

С одной стороны, во многих местах пишут о том, что есть многопоточность, но нет параллелизма (т. е. многопоточное приложение занимает всегда лишь одно ядро, постоянно переключая контекст):

Lack of parallelism. OCaml does not offer any primitives for parallelism through multithreading. In many cases, this does not affect us because we tend to distribute work between independent processes. But when large in-process caches are needed, it results in high memory pressure. This can only be alleviated by sharing the caches between processes, which is cumbersome and greatly affects code architecture. Having multithreading primitives could let us explore a more diverse range of architectures when developing services.

Отсюда: http://engineering.issuu.com/2015/09/17/ocaml-production.html

С другой стороны, модуль Thread реализован через POSIX threads, и непонятно, откуда указанное выше ограничение:

В-третьих, есть нестандартные модули multicore и async, существование которых как бы намекает, что с многопоточностью (вернее, таки параллелизмом) в стандартной библиотеке не всё гладко. Но сами пресловутые модули, похоже, в состоянии перманентной беты.

Наконец, интересно, как это всё соотносится с экосистемой F#, у которого на Mono есть вся мощь CLR, а реализация пи этом наверняка опирается на те же pthreads.

Кто проконсультирует?

★★★★★

В OCaml проблемы со стандартной библиотекой: в ней дофига локов. Плюс рантайм не особо заточен на треды, хотя насчёт этого меня пусть поправит кто-нибудь. Короче, дёргать pthread тебе никто не мешает, но лулзы будешь разгребать сам.

К F# всё это отношения не имеет вообще, там .net во все поля.

Если хочешь полноценные треды, функциональщину и статические типы, то кроме Haskell выбора особо и нет. В Scala проблемы из жабы, хотя Scalaz — довольно классная штука. В F# довольно грустно с библиотеками и проще на C# перелезть.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)

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

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Unicode4all

CoreCLR уже можно использовать для написания консольных прог под все основный ОС?

Он умеет в один бинарь компилять или нужно что-то ставить на машину пользователя? То есть как там с распространением бинарей?

RazrFalcon ★★★★★
()
Последнее исправление: RazrFalcon (всего исправлений: 1)

stackoverflow по твоему вопросу. Если я правильно понимаю как работает камл, то там хоть и треты настоящие, но из-за рантайма системы они не могут выполняться по-настоящему параллельно. На F# не писал, но он же всего лишь обертка над CLR, без специфического _своего_ рантайма, как и C#, и в скомпилированном виде они полностью совместимы. Так что и треды наверняка там работают полностью одинаково.

Aswed ★★★★★
()

Проблема не в pthreads, а в глобальной блокировке, примерно как в питоне. Просто косяк реализации, который постепенно исправляют.

anonymous
()
Ответ на: комментарий от RazrFalcon

По умолчанию он компиляет в свой бинарь, для запуска которого нужен установленный рантайм. Также он может заворачивать приложение вместе с рантаймом в нативный для выбранных платформ бинарник. Подробнее тут.

Unicode4all ★★★★★
()
Ответ на: комментарий от RazrFalcon

Собрал хеловорлд дефолтный при создании проекта. Весь готовый дистрибутив программы (бинарь со всеми либами) весит ~63 МБ.

Unicode4all ★★★★★
()

Никак на ocaml с нормальной многопоточностью.
https://discuss.ocaml.org/t/7-years-after-is-ocaml-suitable-to-write-networki...
GC нормальный пилить не будут, shared memory нормально поддерживать не хотят, Ocaml-multicore больше четрыех лет пилят,а он мертвее мертвого. Короче рантайм не заслуживает принципиального внимания. Уж лучше взять BS и запихивать все это в nodejs, там хотя бы хипсторы по всем граблям походили, а не полтора калеки из Xen и Jane Street.
А сам язык конечно крутой, я пару месяцев ходил и облизывался. В связке с BS позволяет фигачить на одном языке и фронт и бэк, и все это с нормальной типизацией. Если бы не рантайм на бэке, был бы самым адекватным кандидатом для единого языка.
______________________________
А, ну да, еще же комьюнити - полтора бородача в IRC, которые думают что ocaml дар богов и применим только для их сетевого уныния.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 3)
Ответ на: комментарий от Deleted

ходил и облизывался

Та же ситуация.

Вдвойне жестоко, что у OCaml в нагрузку есть такой важный компонент как уже готовая система дистрибуции opam.

Язык и реализация пленительно близки для широкого использования.

aidaho ★★★★★
()

Мне _кажется_, были слухи насчет позаимствовать часть рантайма Go для Ocaml. Никто не слышал?

tailgunner ★★★★★
()
Ответ на: комментарий от RazrFalcon

Много - это flow, hhvm(кусками) и infer? Очень ограниченный спектр применения - почти всe - lexer + parser.

Deleted
()
Ответ на: комментарий от RazrFalcon

Ну есть вещи поинтереснее - MirageOS, XCP, Coq. При этом я даже видел живого коммитера в Coq, а у MirageOS очень крутая концепция.

Deleted
()
Ответ на: комментарий от tailgunner

Мне _кажется_, были слухи насчет позаимствовать часть рантайма Go для Ocaml. Никто не слышал?

Звучит как приделать двигло от запора к тесле. У го достаточно убогий мультикор рантайм: форка нет, гц говно, примитивный м:н с CSP поверх, чтоб было не так больно.

Мультикор ветка окамла пилится здесь:

https://github.com/ocamllabs/ocaml-multicore

В качестве бонуса (и основного инструмента для скедьюлинга нитей) добавляет в язык алгебраические эффекты.

Описание тут:

http://kcsrk.info/ocaml/multicore/2015/05/20/effects-multicore/

http://kcsrk.info/multicore/gc/2017/07/06/multicore-ocaml-gc/

Freyr69 ★★★
()
Ответ на: комментарий от Freyr69

Мне _кажется_, были слухи насчет позаимствовать часть рантайма Go для Ocaml. Никто не слышал?

Звучит как приделать двигло от запора к тесле

К Тесле, у которой пока нет двигателя. Впрочем, я, скорее всего, ошибся.

Мультикор ветка окамла пилится здесь:

https://github.com/ocamllabs/ocaml-multicore

Я знаю. Но вопрос в том, сколько тысяч лет она еще будет пилиться.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Я знаю. Но вопрос в том, сколько тысяч лет она еще будет пилиться.

А ты что, OCaml-ом всерьез интересуешься? Вроде для твоей специфики OCaml из-за GC не подойдет, тебе как раз Rust нужен (если нужен).

PS. Ответь на почту, плз.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

А ты что, OCaml-ом всерьез интересуешься? Вроде для твоей специфики OCaml из-за GC не подойдет

Я знакомился с ФП по учебнику Ocaml. На практике мне ни Ocaml, ни Rust применять негде.

А почта мне что-то не дошла.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Я знакомился с ФП по учебнику Ocaml.

Получается, это просто ностальгия?

А почта мне что-то не дошла.

Переслал еще раз (на всякий случай в Spam загляни, такое бывает).

eao197 ★★★★★
()
Ответ на: комментарий от tailgunner

Но вопрос в том, сколько тысяч лет она еще будет пилиться.

Ну оно всего три года пилится (это очень мало для такого серьезного проекта) и основные фичи готовы (домейны, эффекты, библиотекa c CAS и reagents), как и порты под арм/амд64. Сейчас в основном напилингом занимаются и бенчмарками. Я думаю, год-два еще.

Freyr69 ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.