1 ÍNDICE 1. INTRODUCCIÓN 1.1 Motivación y Orígenes 1.2 Concurrencia y lenguajes funcionales 2. CONCURRENT HASKELL 2.1 Procesos 2.2 Sincronización y comunicación 2.3 Semáforos 2.4 Otras operaciones concurrentes 2.5 Productor/consumidor 2.6 Canales 3. CONCLUSIONES 4. REFERENCIAS
2 1. INTRODUCCIÓN La necesidad de ofrecer concurrencia en el acceso a los recursos computacionales se remonta a los primeros sistemas operativos. Aprovechar al máximo los recursos computacionales fue una necesidad apremiante, sobre todo en la época en que las computadoras eran caras y escasas; el sistema operativo tenía que ofrecer la ejecución concurrente y segura de programas de varios usuarios, que desde distintas terminales utilizaban un solo procesador, y así surgió la necesidad de introducir algunos conceptos de programación concurrente para programar los sistemas operativos.
3 1.1 Motivación y Orígenes Existen sistemas inherentemente concurrentes: los sistemas reactivos. Aparte de esta motivación existen otras dos motivaciones principales, que de hecho fueron anteriores en el tiempo a la utilización de la programación concurrente para la construcción de sistemas reactivos: Explotación de arquitecturas paralelas para obtener ganancia en la velocidad de ejecución (Programación Paralela). Mejorar la utilización del procesador (Sistemas Operativos).
4 1.2 Concurrencia y lenguajes funcionales Debido a la propiedad de confluencia (podemos encontrar dos secuencias de evaluación diferentes que parten del mismo dato de entrada), los lenguajes funcionales pueden utilizar directamente el paralelismo implícito. Otra opción es añadir al lenguaje ciertas extensiones para especificar la concurrencia, como es el caso que vamos a estudiar.
5 2. CONCURRENT HASKELL Concurrent Haskell es una extensión del lenguaje funcional perezoso Haskell para ofrecer la posibilidad de realizar programas concurrentes. Concurrent Haskell representa un nuevo paso que apunta a construir un puente entre el mundo de los lenguajes funcionales puros y los lenguajes intensivos de entrada y salida.
6 Algo más que una extensión de haskell : Consigue integrar la concurrencia en un lenguaje perezoso. Por ejemplo los procesos pueden comunicarse como estructuras de datos sin evaluar unos a otros. Presenta una semántica para Haskell claramente diferenciada en una capa determinista y una capa concurrente. Las técnicas de razonamiento existentes son mantenidas sin modificaciones, por ejemplo, las transformaciones de programas que preservan la corrección en un programa Haskell secuencial también la preservarán en un lenguaje Haskell concurrente. Hay pocas operaciones primitivas nuevas, que son expresivas y fáciles de implementar.
7 nuevos ingredientes a haskell: Procesos, y un mecanismo para gestionarlos. Estados atómicos mutables, para soportar comunicación y cooperación entre los procesos.
8 2.1 Procesos Concurrent Haskell proporciona la nueva primitiva forkIO que inicia un proceso concurrente: forkIO :: IO () -> IO () forkIO a , es una acción que toma a otra acción , a, como su argumento y crea un proceso concurrente que ejecuta dicha acción. La entrada y salida y otros efectos laterales realizados por a, son interpolados de una manera indefinida con aquellos que siguen el forkIO.
Página siguiente |