2010-11-11 12 views
18

-editar- me gustaría una lista grande para que pueda hacer referencia a esto para obtener ideas. Algunas respuestas ya han sido esclarecedorasLista de modelos de concurrencia

¿Qué son algunos modelos de simultaneidad? Escuché que pasa un mensaje donde no hay memoria compartida. futuros que devuelve un objeto de inmediato (para que no se bloquee) y le permite desreferenciar la función original devuelve valor más tarde cuando lo necesita bloqueando si el resultado aún no está listo. Escuché sobre corrutinas, memoria transaccional de software y otras al azar.

Busqué una lista o una wiki y no encontré ninguna buena (muchas no enumeraron 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 es ser usado.

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

+0

[Concurrencia] (http://en.wikipedia.org/wiki/Concurrency_%28computer_science%29) de Wikipedia es un buen comienzo. Enumera (y vincula) una cantidad de modelos aún no mencionados. –

+0

También tenga en cuenta que este hilo actualmente tiene respuestas que la página wiki no menciona. Vamos a tener más –

+0

echa un vistazo a esto para una comparación de los más importantes: http://java-is-the-new-c.blogspot.de/2014/01/comparision-of-different-concurrency.html –

Respuesta

4

COM Threading (Concurrency) Model

  • único subproceso Apartamentos
  • multiproceso Apartamentos
  • Mezclado Desarrollo Modelo

Los objetos COM se pueden usar en varios hilos de un proceso. Los términos "Escoger roscados Apartmen * t" (STA) y " *-Multi roscado Apartamento" (MTA) están utilizado para crear un marco conceptual para describir la relación entre los objetos y los hilos, la relaciones de concurrencia entre los objetos , los medios por los cuales se entregan las llamadas al método a un objeto, y las reglas para pasar los punteros de interfaz entre subprocesos. Componentes y sus clientes elegir entre la siguiendo dos modelos de apartamentos actualmente soportados por el COM:

modelo de un único subproceso (STA): Uno o más hilos en un proceso de uso COM y las llamadas a los objetos COM son sincronizado por COM. Las interfaces son clasificadas entre hilos.Una caso degenerado del modelo de apartamento de un único subproceso, donde solo un subproceso en un proceso determinado usa COM, se llama el modelo de subproceso único. Anterior La información de Microsoft y la documentación de a veces han referido al modelo STA simplemente como "modelo de apartamento". Multi-hilo Apartamento modelo (MTA): Uno o más hilos utilizan COM y las llamadas a COM objetos asociados con el MTA son hecha directamente por todas las discusiones asociados con el MTA sin ningún interposición de código del sistema entre de llamadas y objeto. Debido a que múltiples clientes simultáneos pueden llamar a los objetos más o menos simultáneamente (simultáneamente en sistemas multiprocesador ), los objetos deben sincronizar su estado interno por sí mismos. Las interfaces no se clasifican entre subprocesos . Anterior Microsoft información y documentación tiene a veces se refiere a este modelo como el "modelo de subproceso libre". Tanto el modelo STA como el modelo MTA pueden ser utilizados en el mismo proceso. Esto es a veces denominado proceso de "modelo mixto" .


Other models according to Wikipedia

Hay varios modelos de concurrentes computación, que pueden ser utilizados para entender y analizar sistemas concurrentes. Estos modelos incluyen:

+0

+1 para redes de Petri! No había oído hablar de ellos, pero son una buena analogía para las comprensiones de Scala y quizás también para la comprensión de secuencias de Pitones. – doub1ejack

2

Coroutines

En informática, corrutinas son componentes del programa que generalizan subrutinas para permitir la entrada múltiple puntos para suspender y reanudar ejecución en ciertos lugares. Coroutines son adecuados para que implementan los componentes más conocidos del programa tales como tareas cooperativas, iteradores , listas infinitas y conductos.

1

También hay concurrencia sin bloqueo, como las instrucciones compare-and-swap y load-link/store-conditional. Por ejemplo, compare-and-swap (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 del 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 se implementa la concurrencia de bloqueo (mutexes/semáforos/etc.).

+0

comparar-y -swap y load-link/store-conditional instructions son soporte de hardware para construir un modelo concurrente. Se consideran bloques de construcción del modelo de concurrencia, no un modelo per se. –

3

Software transactional memory

En informática, el software memoria transaccional (STM) es un mecanismo de control de concurrencia análoga a las operaciones de base de datos para controlar el acceso a la memoria compartida en computación concurrente. Es una alternativa a la sincronización basada en cerradura . Una transacción en este contexto es un fragmento de código que ejecuta una serie de lecturas y escribe en la memoria compartida. Estas lecturas y se escriben 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 las transacciones se originó en un documento de 1986 y en la 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 memoria transaccional solo de software (STM) [3].STM ha sido recientemente el foco de intensa investigación y soporte para implementaciones prácticas es creciente.

4

Futures

Un futuro es un lugar-soporte para el resultado indeterminado de un (concurrente) cálculo. Una vez que el cálculo arroja un resultado, el futuro asociado se elimina globalmente reemplazándolo con el valor del resultado. Ese valor puede ser un futuro por sí mismo.

Siempre que un futuro se solicita mediante un cálculo concurrente , es decir, se trata acceder a su valor, que la computación sincroniza automáticamente en el futuro mediante el bloqueo hasta que se convierte determinado o fallidos.

Hay cuatro tipos de futuros:

  • futuros concurrentes representar el resultado de un cálculo concurrente,
  • futuros perezosos representan el resultado de un cálculo que sólo se lleva a cabo bajo petición,
  • los futuros prometidos representan un valor que se promete que se entregará más tarde por medios explícitos,
  • futuros fallidos representan el resultado de un cálculo que finalizó con una excepción.
1

IPC (incluyendo MPI y RMI)

Hola,
en las páginas wiki se puede encontrar que MPI (paso de mensajes de interfaz) es un métodos de una técnica general de IPC: http://en.wikipedia.org/wiki/Inter-process_communication
Otro enfoque interesante es una llamada a procedimiento remoto. Por ejemplo, la RMI de Java le permite enfocarse solo en su dominio de aplicación y patrones de comunicación. Es una concurrencia de "nivel de aplicación".
http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136424.html

Existen varios patrones/herramientas de diseño disponibles para ayudar en la prallelización del modelo de memoria compartida. Aparte de los futuros mencionados también se puede aprovechar:
1. Tema patrón de la piscina - se centra en la distribución de tareas entre el número fijo de hilos: Modelo http://en.wikipedia.org/wiki/Thread_pool_pattern
2. Programador - controla la ejecución hilos de acuerdo con una política de planificación elegido http://en.wikipedia.org/wiki/Scheduler_pattern
3. patrón Reactor - incrustar una sola aplicación roscada en un entorno paralelo http://en.wikipedia.org/wiki/Reactor_pattern
4. OpenMP (permite paralelizar parte de código por medio de pragmas preprocesador)

Regards,
Marcin

4

También hay mapa/reducir.

La idea es generar muchas instancias de un problema secundario y combinar las respuestas cuando estén terminadas. Un ejemplo simple sería la multiplicación de matrices, que es la suma de varios productos de puntos. Usted engendra un hilo de trabajador para cada producto de punto, y cuando todos los hilos terminan, suma el resultado.

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

+0

Gracias por la simple multiplicación de matrices ejemplo –

6

Actor Model

oí de paso de mensajes donde no hay memoria compartida.

¿Se trata de actores de estilo Erlang?

Scala usa esta idea en su marco 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 en absoluto, pero pueden usar mensajes asincrónicos para la interacción. Los actores se pueden ubicar en uno o diferentes hosts y utilizar una política de manejo de errores interesante (cuando ocurre un error, el actor simplemente muere).

¡Debería leer más sobre esto en los documentos de Erlang y Scala, su enfoque realmente directo 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

+1

http://en.wikipedia.org/wiki/Actor_model –

+0

Gracias, Cedrik, exactamente. No tenía la reputación suficiente para publicar el segundo enlace: D – tuxSlayer

1

paralelo de acceso aleatorio Máquina (PRAM) es útil para isues complejidad/tratabilidad (por favor referirse a un nice book para más detalles).

Acerca de los modelos también puede encontrar algo here (por Blaise Barney)

1

¿Qué tal tuple space?

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, considera que hay un grupo de procesadores que producen piezas de datos y un grupo de procesadores que utilizan los datos. Los productores publican sus datos como tuplas en el espacio, y los consumidores luego recuperan datos del el espacio que coincide con un cierto patrón. Esto también se conoce como la metáfora de la pizarra . El espacio Tuple se puede considerar como una forma de memoria compartida distribuida .

1

patrón disruptor de LMAX mantiene los datos en el lugar y asegura sólo un hilo (consumidor o productor) es propietario de un elemento de datos (= ranura cola) a la vez.

Cuestiones relacionadas