En un sentido bien definido, en la actualidad la programación ha dejado en gran medida de ser secuencial para tornarse en altamente concurrente. En algunos inicios azarosos, la concurrencia se simulaba mediante hilos, que a su vez solicitaban tiempo de proceso en procesadores unitarea. Ahora la tecnología exige una y otra vez que se elaboren sistemas distribuidos. Y la mejor forma de elaborar algo es teniendo las herramientas correctas. Erlang es una herramienta correcta para cierto tipo de concurrencia, la que sigue un modelo basado en paso de mensajes, con asincronía, y con procesos (no hilos) ligeros.
En los sistemas distribuidos deben existir al menos dos componentes que se
coordinen (o no se coordinen en absoluto) para que el sistema funcione. Esto equivale a pensar al programar en al menos dos puntos de vista: el de uno o el otro componente. Y no podría darse tal pensamiento si un componente no interactúa con el otro (caso de no coordinación entre sí, el cual es cómputo en
paralelo). Por eso es tan exigente programar concurrentemente. Pero aún más,
el sistema al desarrollarse rara vez tendrá un comportamiento determinístico:
no es fácil ver qué sucederá en el futuro del sistema. Y por último, las fallas
pueden venir desde diversos puntos que no fueron en su momento considerados.
La propuesta de este blog nace para compartir algunas experiencias en programación concurrente. Empezaremos haciendo un proyecto sencillo: un servidor que
"despache" números factoriales y de Fibonacci. Pasaremos por varias otras etapas, y llegaremos a la formulación (suficiente para nuestros propósitos)
de simular un conjunto de robots que limpian concurrentemente cierta área
de piso. El resultado debe convencernos que Erlang es un buen lenguaje
para este tipo de tareas, y ahí donde sea necesario manejaremos algún tipo
de recursos compartidos, viendo qué se puede hacer para evitar que los recursos se bloqueen, se mal usen, o se corrompan.
No hay comentarios:
Publicar un comentario