Vous êtes sur la page 1sur 6

Qu es concurrencia?

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.

1. Mecanismos de sealizacin
- Semforos.
- Cerrojos y variables condicin.
- Seales, eventos.
- Retardos temporales.
2. Recursos compartidos
- Regiones crticas.
- Monitores.
- Objetos protegidos.
3. Comunicacin directa (memoria compartida)
4. Canales
5. Buzones
6. Llamada a procedimiento remoto (RPC)

Programacin paralela

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.









































Egrafa

- http://www.alegsa.com.ar/Dic/concurrencia.php

- http://es.scribd.com/doc/95575708/concurrencia#download

- http://es.wikipedia.org/wiki/Computaci%C3%B3n_concurrente

- http://www.genbetadev.com/paradigmas-de-programacion/manejar-la-concurrencia-con-
actores

Vous aimerez peut-être aussi