Эрланг - С и Эрланг - PullRequest
       4

Эрланг - С и Эрланг

6 голосов
/ 21 августа 2010

В erlang есть некоторые общие библиотечные функции, которые намного медленнее, чем их эквивалент c.

Возможно ли сделать так, чтобы код c выполнял двоичный анализ и сжатие чисел, и имел процессы порождения erlang для запускакод

Ответы [ 9 ]

4 голосов
/ 24 августа 2010

Конечно, C будет быстрее, в крайнем случае, после оптимизации.Если под более быстрым вы подразумеваете более быстрый запуск.

Эрланг будет гораздо быстрее писать.В зависимости от требований к скорости Erlang, вероятно, «достаточно быстр», и это сэкономит вам дни поиска ошибок в коде C.

C будет быстрее только после оптимизации.Если вы потратите одинаковое количество времени на C и Erlang, вы получите примерно одинаковую скорость (обратите внимание, что в этой оценке времени я считаю потраченное время на отладку и исправление ошибок. В Erlang это будет намного меньше).

Итак:

faster writing = Erlang
faster running (after optimisations) = C
faster running without optimisations = any of the two

Выберите.

3 голосов
/ 26 декабря 2015

Существует два грубых эмпирических правила, основанных на Часто задаваемые вопросы по Erlang :

  1. Код, который включает в себя, главным образом, сокращение числа, и обработка данных будет выполняться примерно 10 размедленнее, чем эквивалентная C-программа.Это включает в себя почти все «микро тесты».

  2. Большие системы, которые большую часть своего времени общались с другими системами, восстанавливались после сбоев и принимали сложные решения, по крайней мере, так же быстро, как эквивалентные программы на Си.

Однако существуют некоторые официальные решения для недостаточной производительности обработки числа Эрланга:

Реализация функции в C и загрузка ее объектного кода в виртуальную машину Erlang, чтобы она была похожа на стандартную функцию Erlang, но с собственной производительностью.

Примеры: Evedis , Bitcask , ElevelDB

Байт-ориентированный интерфейс от виртуальной машины Erlang к внешним процессам ОС через стандартные дескрипторы файлов ввода и вывода.Связь с этим портом осуществляется через передачу сообщений с точки зрения Эрланга.

Динамически связанный объектный файл C, который являетсязагружается в виртуальную машину Erlang и действует как порт.Связь с этим драйвером порта осуществляется через передачу сообщений с точки зрения Эрланга.

Примеры: OTP_Inet , ENanomsg , P1_TLS

Вы можете просто продвинуть свою среду выполнения Erlang на распределенный узел.Таким образом, существует спецификация для реализации среды выполнения Erlang в C и связи с узлами Erlang с помощью единого интерфейса.

Все вышеупомянутые решения имеют свои плюсы и минусы и должны использоваться с особой осторожностью.

1 голос
/ 11 декабря 2010

Если вы действительно ищете скорость, вы должны попробовать OpenMP или MPI-фреймворки параллельного программирования для C и C ++. Я рекомендую вам взглянуть на Шаблоны для параллельного программирования (ссылка на amazon.com) для получения подробной информации о шаблонах программирования OpenMP и MPI.

Будет полезен раздел erl_nif в справочном руководстве Erlang ERTS .

1 голос
/ 22 августа 2010

легкая заправка не так интересна для эрланга.Простота создания потоков + передача сообщений и структура OTP - это то, что удивительно в erlang.Если вам нужно обработать число, используйте что-то вроде ocaml, python, haskell.Erlang отлично справляется с обработкой чисел.

Синтаксический анализ двоичных файлов - одна из тех вещей, в которых erlang лучше всего работает, вероятно, лучше для нее.Книга по программированию Джо Эрланг охватывает все очень хорошо, и не так дорого используется.Это также говорит об интеграции кода C и приводит пример.источник доступен из прагматического программирования без необходимости покупать книгу, вы можете получить команду #include или что-то в этом роде.

1 голос
/ 21 августа 2010

Прежде всего напишите всю логику системы в Erlang, затем реализуйте обработку двоичных файлов в C. Использование NIF (это своего рода интерфейс для C) довольно просто и прозрачно для остальной системы. Вот еще одна тема о разговоре с C Выполнить блок кода C на Erlang .

Перед взломом C убедитесь, что вы тестировали текущую реализацию. Вполне возможно, что он удовлетворит ваши потребности, особенно с последним выпуском Erlang / OTP (R14), который вносит значительные улучшения в двоичную обработку.

0 голосов
/ 01 октября 2018

Чтобы ответить на этот вопрос, да, можно заставить erlang вызвать некоторую функцию c для выполнения конкретной задачи.Наиболее распространенным способом является использование NIF - http://erlang.org/doc/tutorial/nif.html. NIF рекомендовались только для кратковременных функций до версии Erlang 20 или около того, несколько мс, потому что они блокировали, что не могло работать с вытесняющим планировщиком Erlangs.Теперь с грязными нитями это более гибко, вы можете прочитать об этом.

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

0 голосов
/ 06 марта 2016

Да,

Но есть несколько способов, в общих чертах, некоторые или все из них уже перечислены.

Мы должны спросить:

  • Являются ли эти процедуры действительно эквивалентными (чем отличаются Erlang и C)?
  • Есть ли лучший способ написать Erlang для этой задачи (другие процедуры / библиотеки или типы данных)?

Может быть полезно рассмотреть этот пост: Масштабирование и скорость с Эрлангом .

0 голосов
/ 27 декабря 2015

Я использовал C более 20 лет.Я использую Erlang почти исключительно в последние годы.С быстрее работает по понятной причине.Но Эрланг достаточно быстр для большинства вещей, когда вы делаете это правильно.Кроме того, написание Erlang намного быстрее и доставляет больше удовольствия.

Для части алгоритмов, для которых критически важна скорость выполнения, она, безусловно, может быть написана на C, как и в Erlang BIF.

0 голосов
/ 07 сентября 2010

Если вам нравится Erlang, но вы хотите скорость C, почему бы не пойти на JOCAML.Это расширение для OCAML (похожее на Erlang, но близкое к C по скорости), разработанное для многоядерной революции, происходящей в данный момент.Я люблю это (и я знаю больше чем 10 языков программирования ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...