parallelism concurrencia concurrency

concurrencia - concurrency definition



Lista de modelos de concurrencia. (11)

-editar- me gustaría una lista grande para poder consultar esto para obtener ideas. Algunas respuestas ya han sido esclarecedoras.

¿Cuáles son algunos modelos de concurrencia? Escuché sobre el paso de mensajes donde no hay memoria compartida. los futuros que devuelven un objeto de inmediato (para que no se bloquee) y le permiten eliminar la referencia a la función original, devuelve el valor más adelante cuando lo necesite, si el resultado aún no está listo. Oí hablar de coroutines, software de memoria transaccional y otros aleatorios.

Busqué una lista o un wiki y no pude encontrar ninguna buena (muchos no en la lista 3 que mencioné anteriormente) y muchos resultados me dieron una descripción complicada que explica cómo funciona en lugar de qué hace o cómo se usa.

¿Cuáles son algunos modelos de concurrencia y qué es una descripción simple de lo que hacen? Uno por respuesta.


Modelo de actor

Escuché sobre el paso de mensajes donde no hay memoria compartida.

¿Es sobre los actores de estilo Erlang?

Scala usa esta idea en su marco de Actores (por lo tanto, en Scala no es una parte del lenguaje, solo una biblioteca) y se ve bastante sexy.

En pocas palabras, los actores son objetos que no tienen datos compartidos, pero pueden usar mensajes asíncronos para la interacción. Los actores pueden ubicarse en uno o diferentes hosts y usar una interesante política de manejo de errores (cuando ocurrió el error, el actor simplemente muere).

Debería leer más sobre esto en los documentos de Erlang y Scala, ¡es un enfoque realmente sencillo y progresivo!

Capítulos 3, 17, 17.11:

http://www.scala-lang.org/sites/default/files/linuxsoft_archives/docu/files/ScalaByExample.pdf https://en.wikipedia.org/wiki/Actor_model


Coroutines

En informática, las corrutinas son componentes de programas que generalizan subrutinas para permitir múltiples puntos de entrada para suspender y reanudar la ejecución en ciertas ubicaciones. Coroutines está bien adaptado para implementar componentes de programas más familiares, como tareas cooperativas, iteradores, listas infinitas y tuberías.


IPC (incluyendo MPI y RMI )

Hola,
en las páginas wiki puede encontrar que MPI (interfaz de paso de mensajes) es un método de una técnica general de IPC: IPC
Otro enfoque interesante es una llamada a procedimiento remoto. Por ejemplo, el RMI de Java le permite centrarse solo en el dominio de su aplicación y los patrones de comunicación. Es una concurrencia de "nivel de aplicación".
RMI

Hay varios patrones / herramientas de diseño disponibles para ayudar en la pralelización del modelo de memoria compartida. Aparte de los futuros mencionados, también se puede aprovechar:
1. Patrón de grupo de subprocesos: se centra en la distribución de tareas entre un número fijo de subprocesos: http://en.wikipedia.org/wiki/Thread_pool_pattern
2. Patrón del programador: controla la ejecución de los hilos de acuerdo con una política de programación elegida http://en.wikipedia.org/wiki/Scheduler_pattern
3. Patrón del reactor: para integrar una aplicación de un solo subproceso en un entorno paralelo http://en.wikipedia.org/wiki/Reactor_pattern
4. OpenMP (permite paralelizar parte del código mediante pragmas de preprocesador)

Saludos,
Marcin


Memoria transaccional de software

En informática, la memoria transaccional de software (STM) es un mecanismo de control de concurrencia análogo a las transacciones de base de datos para controlar el acceso a la memoria compartida en la computación concurrente. Es una alternativa a la sincronización basada en bloqueo. Una transacción en este contexto es un fragmento de código que ejecuta una serie de lecturas y escrituras en la memoria compartida. Estas lecturas y escrituras ocurren lógicamente en un solo instante en el tiempo; Los estados intermedios no son visibles para otras transacciones (exitosas). La idea de proporcionar soporte de hardware para transacciones se originó en un documento de 1986 y patente de Tom Knight [1]. La idea fue popularizada por Maurice Herlihy y J. Eliot B. Moss [2]. En 1995, Nir Shavit y Dan Touitou extendieron esta idea a la memoria transaccional de solo software (STM) [3]. STM ha sido recientemente el foco de investigación intensa y el apoyo para implementaciones prácticas está creciendo.


Futures

Un futuro es un marcador de posición para el resultado indeterminado de un cálculo (concurrente). Una vez que el cómputo entrega un resultado, el futuro asociado se elimina al reemplazarlo globalmente con el valor del resultado. Ese valor puede ser un futuro en sí mismo.

Cuando un cómputo concurrente solicita un futuro, es decir, intenta acceder a su valor, ese cómputo se sincroniza automáticamente en el futuro mediante el bloqueo hasta que se determina o falla.

Hay cuatro tipos de futuros:

  • futuros concurrentes representan el resultado de un cómputo concurrente,
  • Los futuros perezosos representan el resultado de un cálculo que solo se realiza a pedido,
  • Los futuros prometidos representan un valor que se promete entregar más adelante por medios explícitos,
  • Los futuros fallidos representan el resultado de un cálculo que terminó con una excepción.

¿Qué tal el espacio de la tupla ?

Un espacio de tupla es una implementación del paradigma de memoria asociativa para computación paralela / distribuida. Proporciona un repositorio de tuplas a las que se puede acceder simultáneamente. Como ejemplo ilustrativo, considere que hay un grupo de procesadores que producen piezas de datos y un grupo de procesadores que usan los datos. Los productores publican sus datos como tuplas en el espacio, y los consumidores luego recuperan los datos del espacio que coinciden con un determinado patrón. Esto también se conoce como la metáfora de la pizarra. Tuple espacio puede ser pensado como una forma de memoria compartida distribuida.


La Máquina de Acceso Aleatorio Paralelo (PRAM) es útil para los problemas de complejidad / capacidad de manejo (consulte un buen libro para obtener más información).

Sobre modelos también encontrarás algo here (por Blaise Barney)


También existe una concurrencia sin bloqueo, como las instrucciones de comparación e intercambio y de carga de enlace / almacenamiento condicional. Por ejemplo, comparar y cambiar (cas) podría definirse así:

bool cas (int new_value, int current_value, int * location);

Esta operación intentará establecer el valor en la ubicación al valor pasado en new_value, pero solo si el valor en la ubicación es el mismo que current_value. Esto solo requiere una instrucción y generalmente es cómo se implementa la concurrencia de bloqueo (mutexes / semáforos / etc).


También hay mapa / reducir.

La idea es generar muchos casos de un problema secundario y combinar las respuestas cuando estén listas. Un ejemplo simple sería la multiplicación de matrices, que es la suma de varios productos de puntos. Usted genera un subproceso de trabajo para cada producto de puntos, y cuando todos los subprocesos están terminados, suma el resultado.

Así es como las GPU, los lenguajes funcionales como LISP / Scheme / APL y algunos marcos (Map / Reduce de Google) manejan la concurrencia.


El patrón de disruptor de LMAX mantiene los datos en su lugar y asegura que solo un subproceso (consumidor o productor) sea propietario de un elemento de datos (= ranura de cola) a la vez.


Modelo de subprocesos (concurrencia) COM

  • Apartamentos de un solo hilo
  • Apartamentos multihilo
  • Desarrollo de modelos mixtos

Los objetos COM se pueden usar en múltiples hilos de un proceso. Los términos " Apartamentos de un solo hilo * t" (STA) y " * Apartamento de múltiples hilos " (MTA) se utilizan para crear un marco conceptual para describir la relación entre los objetos y los hilos, las relaciones de concurrencia entre los objetos, los medios por los cuales las llamadas de método se envían a un objeto y las reglas para pasar punteros de interfaz entre subprocesos. Los componentes y sus clientes eligen entre los siguientes dos modelos de apartamentos actualmente compatibles con COM:

Modelo de apartamento de un solo hilo (STA): uno o más hilos en un proceso utilizan COM y las llamadas a objetos COM están sincronizadas por COM. Las interfaces se calculan entre hilos. Un caso degenerado del modelo de apartamento de un solo hilo, donde solo un hilo en un proceso determinado usa COM, se llama el modelo de un solo hilo. La información y documentación anterior de Microsoft a veces se ha referido al modelo STA simplemente como el "modelo de apartamento". Modelo de apartamento de subprocesos múltiples (MTA): uno o más subprocesos usan COM y las llamadas a los objetos COM asociados con el MTA se realizan directamente por todos los subprocesos asociados con el MTA sin ninguna interposición del código del sistema entre el llamante y el objeto. Debido a que varios clientes simultáneos pueden llamar a los objetos de forma más o menos simultánea (simultáneamente en sistemas con múltiples procesadores), los objetos deben sincronizar su estado interno por sí mismos. Las interfaces no se calculan entre los hilos. La información y documentación anterior de Microsoft a veces se ha referido a este modelo como el "modelo de hilos libres". Tanto el modelo STA como el modelo MTA se pueden utilizar en el mismo proceso. Esto se conoce a veces como un proceso de "modelo mixto".

Otros modelos según Wikipedia.

Existen varios modelos de computación concurrente, que pueden usarse para comprender y analizar sistemas concurrentes. Estos modelos incluyen: