He estado observando la creciente visibilidad de los lenguajes de programación funcionales y las características durante un tiempo. Los miré y no vi el motivo de la apelación.
Luego, recientemente asistí a la presentación "Basics of Erlang" de Kevin Smith en Codemash .
Disfruté de la presentación y aprendí que muchos de los atributos de la programación funcional hacen que sea mucho más fácil evitar problemas de subprocesos / concurrencia. Entiendo que la falta de estado y mutabilidad hace que sea imposible que varios subprocesos alteren los mismos datos, pero Kevin dijo (si entendí correctamente) que toda la comunicación se realiza a través de mensajes y los mensajes se procesan sincrónicamente (evitando nuevamente problemas de concurrencia).
Pero he leído que Erlang se usa en aplicaciones altamente escalables (la razón por la que Ericsson lo creó en primer lugar). ¿Cómo puede ser eficiente manejar miles de solicitudes por segundo si todo se maneja como un mensaje procesado sincrónicamente? ¿No es por eso que comenzamos a avanzar hacia el procesamiento asincrónico, para que podamos aprovechar la ejecución de múltiples subprocesos de operación al mismo tiempo y lograr escalabilidad? Parece que esta arquitectura, aunque más segura, es un paso atrás en términos de escalabilidad. ¿Qué me estoy perdiendo?
Entiendo que los creadores de Erlang evitaron intencionalmente el soporte de subprocesos para evitar problemas de concurrencia, pero pensé que el subproceso múltiple era necesario para lograr la escalabilidad.
¿Cómo pueden los lenguajes de programación funcionales ser intrínsecamente seguros para subprocesos, pero aún así escalar?