He estado observando la creciente visibilidad de los lenguajes de programación y funciones funcionales por un tiempo. Los miré y no vi el motivo de la apelación.¿Cómo/por qué los lenguajes funcionales (específicamente Erlang) escalan bien?
Luego, recientemente asistí a la presentación de Kevin Smith "Conceptos básicos de Erlang" al Codemash.
Disfruté 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 subprocesamiento/concurrencia. Entiendo que la falta de estado y mutabilidad hace que sea imposible que múltiples hilos modifiquen los mismos datos, pero Kevin dijo (si entendí correctamente) que toda la comunicación se realiza a través de mensajes y que los mensajes se procesan de forma síncrona (evitando problemas de concurrencia).
Pero he leído que Erlang se usa en aplicaciones altamente escalables (la razón por la cual 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 asíncrono, por lo que podemos aprovechar la posibilidad de ejecutar varios hilos de operación al mismo tiempo y lograr la 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 intencionadamente el uso de subprocesos para evitar problemas de simultaneidad, pero pensé que era necesario realizar varios subprocesos para lograr la escalabilidad.
¿Cómo pueden los lenguajes de programación funcionales ser intrínsecamente seguros para subprocesos, y aún así escalarse?
[No mencionado]: La máquina virtual de Erlangs lleva la asincronía a otro nivel. Por vudú magic (asm) permite operaciones de sincronización como socket: leer para bloquear sin detener un hilo de os. Esto le permite escribir código sincrónico cuando otros idiomas lo forzarían a ingresar en nidos de devolución de llamada asíncrona. Es mucho más fácil escribir una aplicación de escalado con la imagen mental de microservicios de un solo hilo, VS teniendo en cuenta el panorama general cada vez que insertas algo en la base de códigos. –
@Vans S Interesante. –