En computacin, la concurrencia es la propiedad de los sistemas que permiten que mltiples
procesos sean ejecutados al mismo tiempo, y que potencialmente puedan interactuar entre s.
Los procesos concurrentes pueden ser ejecutados realmente de forma simultnea, slo cuando cada uno es ejecutado en diferentes procesadores. En cambio, la concurrencia es simulada si slo existe un procesador encargado de ejecutar los procesos concurrentes, simulando la concurrencia, ocupndose de forma alternada en uno y otro proceso a pequesimos intervalos de tiempo. De esta manera simula que se estn ejecutando a la vez.
Debido a que los procesos concurrentes en un sistema pueden interactuar entre otros tambin en ejecucin, el nmero de caminos de ejecucin puede ser extremadamente grande, resultando en un comportamiento sumamente complejo. Las dificultades asociadas a la concurrencia han sido pensadas para el desarrollo de lenguajes de programacin y conceptos que permitan hacer la concurrencia ms manejable.
Paralelismo vs concurrencia
El paralelismo es un caso particular de la concurrencia. Se habla de paralelismo cuando ocurre la ejecucin simultnea de instrucciones: - Arquitecturas paralelas. - Procesamiento paralelo. - Algoritmos paralelos. - Programacin paralela.
Procesos y concurrencia
Una forma de ver la concurrencia es como un conjunto de actividades que se desarrollan de forma simultnea. En informtica, cada una de esas actividades se suele llamar procesos.
Qu es un sistema concurrente?
Es un sistema informtico en el que la concurrencia desempea un papel importante. Para lo cual podemos mencionar como ejemplos claros donde se implementa: - Sistemas operativos. - Sistemas de gestin de bases de datos (DBMS). - Sistemas de tiempo real. - Sistemas distribuidos.
Concurrencia inherente o potencial
Sistemas inherentemente concurrentes: El entorno con el que interactan, o el entorno que modelan tiene forzosamente actividades simultneas. Para lo cual podemos ejemplificarlo a travs de una red de cajeros automticos.
Sistemas potencialmente concurrentes: No es estrictamente necesario que haya concurrencia, pero se puede sacar partido de ella. Para lo cual podemos ejemplificarlo como un aumento de la velocidad de en ejecucin.
Tcnicas para producir actividades concurrentes en el computador
De forma manual: - Trabajar directamente sobre el hardware. - Usar llamadas al sistema o bibliotecas de software (ejs. PVM, pthreads). - Expresarla en un lenguaje de alto nivel.
De forma automtica: - El sistema operativo se encarga automticamente (ej. multiprogramacin). - El compilador detecta la concurrencia implcita en nuestros programas secuenciales.
Programacin concurrente:
Es la simultaneidad en la ejecucin de mltiples tareas interactivas. Estas tareas pueden ser un conjunto de procesos o hilos de ejecucin creados por un nico programa. Las tareas se pueden ejecutar en una sola unidad central de proceso (multiprogramacin), en varios procesadores o en una red de computadores distribuidos. La programacin concurrente est relacionada con la programacin paralela, pero enfatiza ms la interaccin entre tareas. As, la correcta secuencia de interacciones o comunicaciones entre los procesos y el acceso coordinado de recursos que se comparten por todos los procesos o tareas son las claves de esta disciplina.
Los pioneros en este campo fueron Edsger Dijkstra, Per Brinch Hansen, y C. A. R. Hoare.
Motivacin de la programacin concurrente
- Aprovechar el hardware multiprocesador. - Aumentar la productividad de la CPU. - Facilitar la escritura de aplicaciones donde la concurrencia sea un elemento importante.
Lenguajes concurrentes
Aquellos que incorporan caractersticas que permiten expresar la concurrencia directamente, sin recurrir a servicios del sistema operativo, bibliotecas, etc. Normalmente incluyen mecanismos de sincronizacin y comunicacin entre procesos. Por mencionar algunos ejemplos: Ada, Java, SR, Occam, PARLOG.
Sincronizacin y comunicacin
Los procesos concurrentes tendrn necesidad de comunicarse informacin. Adems, ser necesario en ocasiones detener a un proceso hasta que se produzca un determinado evento o se den ciertas condiciones sincronizacin.
Los lenguajes concurrentes deben proporcionar mecanismos de sincronizacin y comunicacin.
Cuando estamos especialmente interesados en escribir cdigo para ser utilizado en un sistema multiprocesador, hablamos de programacin paralela o algoritmos paralelos.
Es un caso particular de la programacin concurrente en el que prima la ejecucin paralela.
Manejar la concurrencia con Actores
El modelo de actores que fue propuesto por primera vez por Carl Hewitt en 1973; es un modelo de concurrencia computacional que al igual que los hilos, trata de solucionar el problema de la concurrencia.
En el modelo de actores, cada objeto es un actor. Esta es una entidad que tiene una cola de mensajes o buzn y un comportamiento. Los mensajes pueden ser intercambiados entre los actores y se almacenan en el buzn. Al recibir un mensaje, el comportamiento del actor se ejecuta. El actor puede: enviar una serie de mensajes a otros actores, crear una serie de actores y asumir un nuevo comportamiento para el prximo mensaje. La importancia en este modelo es que todas las comunicaciones se llevan a cabo de forma asincrnica. Esto implica que el remitente no espera a que un mensaje sea recibido en el momento que lo envo, solo sigue su ejecucin.
Una segunda caracterstica importante es que todas las comunicaciones se producen por medio de mensajes: no hay un estado compartido entre los actores. Si un actor desea obtener informacin sobre el estado interno de otro actor, se tendr que utilizar mensajes para solicitar esta informacin. Esto permite a los actores controlar el acceso a su estado, evitando problemas.
Erlang
Es un lenguaje de programacin concurrente y un sistema de ejecucin que incluye una mquina virtual y bibliotecas. Fue diseado en la compaa Ericsson para realizar aplicaciones distribuidas, tolerantes a fallos y de funcionamiento ininterrumpido. Originalmente, Erlang era un lenguaje propietario de Ericsson, pero fue cedido como software de cdigo abierto en 1998. La implementacin de Ericsson es, principalmente interpretada pero tambin incluye un compilador HiPE (slo soportado en algunas plataformas).
Entre los mayores logros de la plataforma podemos destacar que el chat de facebook y la base documental CouchDB.
Sin dudas una cosa que hace muy especial de Erlang es como maneja la concurrencia. Erlang no maneja la concurrencia con hilos como nos tiene acostumbrado C, C++ o Java. Erlang soluciona la programacin concurrente mediante el modelo de actores.
En Erlang los procesos o actores: - Son rpidos de crear y destruir. - El envo de mensajes entre procesos es muy rpido. - Es fcil mantener un gran nmero de procesos. - Son ligeros. - Son independientes y no comparten memoria. - Slo un proceso tratar un mensaje pasado, en ningn caso pasar por otro proceso.
Conclusiones
- Desarrollar aplicaciones concurrentes puede ser una tarea ardua debido a su complejidad. Por este motivo naci el modelo de actores, para simplificar el desarrollo concurrente.