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