Como / por que as linguagens funcionais (especificamente o Erlang) são bem dimensionadas?

Eu tenho observado a crescente visibilidade de linguagens e recursos de programação funcional por um tempo. Eu olhei para eles e não vi o motivo do recurso.

Recentemente, participei da apresentação de Kevin Smith, "Basics of Erlang", naCodemash.

Gostei da apresentação e aprendi que muitos dos atributos da programação funcional tornam muito mais fácil evitar problemas de encadeamento / simultaneidade. Entendo que a falta de estado e a mutabilidade tornam impossível que vários threads alterem os mesmos dados, mas Kevin disse (se bem entendi) toda a comunicação ocorre por meio de mensagens e as mensagens são processadas de forma síncrona (novamente evitando problemas de concorrência).

Mas eu li que o Erlang é usado em aplicativos altamente escalonáveis (a razão pela qual a Ericsson o criou em primeiro lugar). Como pode ser eficiente lidar com milhares de solicitações por segundo se tudo é tratado como uma mensagem processada de forma síncrona? Não foi por isso que começamos a avançar para o processamento assíncrono - para que possamos tirar proveito da execução de vários threads de operação ao mesmo tempo e obter escalabilidade? Parece que essa arquitetura, embora mais segura, seja um retrocesso em termos de escalabilidade. o que estou perdendo?

Entendo que os criadores de Erlang evitaram intencionalmente o suporte ao encadeamento para evitar problemas de simultaneidade, mas achei que o multiencadeamento era necessário para alcançar a escalabilidade.

Como as linguagens de programação funcional podem ser inerentemente seguras para threads, mas ainda escalar?

questionAnswers(8)

yourAnswerToTheQuestion