lunes, 27 de septiembre de 2010

Concurrencia en Erlang



Erlang es un lenguaje de programación de propósito general, que como mayor característica es un lenguaje funcional el cual implementa el paradigma funcional por medio del modelo de actores. Como es esto?

Erlang tiene un proceso basado en modelo de concurrencia con pasaje de asíncrono de mensajes.

El modelo de actores es un modelo de concurrencia computacional que trata a los "actores" como los primitivos universal de la computación digital en paralelo: en respuesta a un mensaje que recibe, un actor puede tomar decisiones locales, crear más actores, envía más mensajes, y determinar cómo responder al siguiente mensaje recibido.

Veamos un pequeño ejemplo:

-module(counter).
-export([start/0,loop/1]).

start() ->
spawn(counter, loop, [0]).

loop(Val) ->
receive
increment -> loop(Val + 1)
end.

En este ejemplo se muestra:
  • Un nuevo proceso contador inicia por cada llamada a counter:start/0 . Cada función evalua counter:loop/0.
  • Una función recursiva para generar un proceso permanente que se suspende cuando espera de la entrada. Lazo es una función recursiva de cola, que asegura que un proceso contra evaluará en el espacio constante.
  • Recepción de mensajes selectivos, en este caso el incremento de mensajes.

El modelo de actores también fue tomado por Scala para implementar la concurrencia computacional.

El modelo de Actores de Scala proporciona envios de mensajes síncronos y asíncronos (este último se implementan mediante el intercambio de varios mensajes asíncronos). Por otra parte, los actores pueden comunicarse con el futuro en que las solicitudes se gestionan de forma asíncrona, pero devuelven una representación (el futuro) que queda a la espera de la respuesta.
Lo bueno de scala es que los actores los cuales se puede usar beneficios de la programación orientada a objetos.


Dejo links:
http://www.erlang.org
http://ruben.savanne.be/articles/concurrency-in-erlang-scala