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