Erlang Interoperability руководство обсуждает различные механизмы взаимодействия. Вот мои выводы:Каков наилучший способ выполнения вычислительно-интенсивных задач в Erlang без потерь масштабируемости?
Порты и программы Erl_Interface: ОС запланирована, ограничена масштабируемость.
Порт Драйверы: опасно, потому что авария в драйвере порта приносит также эмулятор .
C Узлы: серверу узлов необходимо масштабировать, а также приложение Erlang, чтобы избежать жертвы масштабируемости.
NIF: Loic Суммы их хорошо.
Некоторые выступают за использование OpenCL в основном делегировании ресурсов голодных вычислений на GPU, позволяя эмулятора Erlang владеть ЦП. Это звучит фантастически, но тогда у вас есть требование на ваших серверах с подходящим графическим процессором.
Использование JInterface и связь с процессом Java, который порождает поток для каждого запроса, может быть вариантом.
Так кто-нибудь сталкивался с решением, которое было проверено на практике и оказалось хорошо работать?
Описание NIF, ссылки на которые вы видите устаревшим и неточным. Например, NIF, запущенный в планировщике «более нескольких микросекунд», не вызовет проблем; это происходит, только если NIF работает более нескольких миллисекунд. Кроме того, функция ['enif_schedule_nif'] (http://www.erlang.org/doc/man/erl_nif.html#enif_schedule_nif) обеспечивает хороший способ разбить длинные NIF, чтобы избежать проблем с планировщиком, плюс с экспериментальным [грязным планировщик] (http://www.erlang.org/doc/man/erl_nif.html#dirty_nifs) NIF могут работать до тех пор, пока они хотят, не вызывая икоты планировщика. –
Чтобы использовать функцию грязного планировщика, вам необходимо создать эмулятор с поддержкой экспериментальной грязной планировщика.Я не думаю, что идея запуска производственного кода с экспериментальными функциями будет иметь много энтузиастов. В общем, NIF кажутся немного опасными. Как указал Лойк, они могут разрушить вашу виртуальную машину. И компиляция библиотек, которые используют их под Windows, - это кошмар, и я не поклонник запуска Erlang на WIndows. – coolfeature
Экспериментальная грязная функциональность планировщика когда-нибудь станет регулярной функцией, надеюсь, в Erlang 19. Я реализовал грязную функциональность планировщика для Erlang/OTP, и я запустил все свои виртуальные машины Erlang 17 и 18 с включенной поддержкой и не испытывал никаких проблем с ней , Также см. [Эти измерения] (https://medium.com/@jlouis666/erlang-dirty-scheduler-overhead-6e1219dcc7), которые показывают крошечное количество накладных расходов, связанных с переключением процесса на грязный планировщик. –