Эрланг использует модель процесса, в которой процесс может выполняться на одной и той же виртуальной машине или на другом процессоре. Это возможно только потому, что сообщения копируются между процессами, нет общего (изменяемого) состояния. Многопроцессорный паралелизм идет намного дальше, чем многопоточность, поскольку потоки зависят от общей памяти, это может быть только 8 потоков, работающих параллельно на 8-ядерном процессоре, в то время как многопроцессорность может масштабироваться до тысяч параллельных процессов.

людал растущую известность функциональных языков программирования и функций в течение некоторого времени. Я посмотрел на них и не увидел причину апелляции.

Затем я недавно посетил презентацию Кевина Смита «Основы Эрланга» наCodemash.

Мне понравилась презентация, и я узнал, что многие атрибуты функционального программирования позволяют намного легче избежать проблем с многопоточностью / параллелизмом. Я понимаю, что отсутствие состояния и изменчивости не позволяет нескольким потокам изменять одни и те же данные, но Кевин сказал (если я правильно понял), что все общение происходит через сообщения, а сообщения обрабатываются синхронно (опять же, избегая проблем параллелизма).

Но я читал, что Erlang используется в приложениях с высокой степенью масштабируемости (именно поэтому Эрикссон создал его в первую очередь). Как может быть эффективно обрабатывать тысячи запросов в секунду, если все обрабатывается как синхронно обрабатываемое сообщение? Разве не поэтому мы начали двигаться к асинхронной обработке - чтобы мы могли воспользоваться одновременным выполнением нескольких потоков и достичь масштабируемости? Кажется, что эта архитектура, хотя и безопаснее, является шагом назад с точки зрения масштабируемости. Чего мне не хватает?

Я понимаю, что создатели Erlang намеренно избегали поддержки многопоточности, чтобы избежать проблем параллелизма, но я думал, что многопоточность необходима для достижения масштабируемости.

Как функциональные языки программирования могут быть поточно-ориентированными, но все же масштабируемыми?

Ответы на вопрос(8)

Ваш ответ на вопрос