Java multi-threading - protocolo de coherencia de caché La comprensión y el impacto en la programación concurrente

Como lenguaje Java multiplataforma y su aplicación tienen que enfrentar diferentes sistemas de hardware subyacente, un modelo de capa intermedia diseñada para proteger a las diferencias de hardware subyacentes, a los desarrolladores superiores a utilizar una interfaz consistente. modelo de memoria de Java es un modelo de la capa media, que protege los detalles de implementación de los soportes programador de hardware más corriente principal plataforma de hardware tales. Para entender el modelo de memoria de Java, así como algunas de las tecnologías de procesamiento de alta concurrencia, y comprender algunos conocimientos básicos de hardware es necesario. Este conocimiento nos hablará de algunos de los equipos asociados a la programación concurrente.

Un proceso de cálculo básico ejecutado por una CPU como sigue:

1. Los programas y los datos son cargados en la memoria principal

2. Las instrucciones y los datos se cargan en la memoria caché de la CPU

3. ejecución de instrucciones de la CPU, los resultados se escriben en la memoria caché

4. El caché de datos de escritura no simultánea a la memoria principal

Este proceso, podemos ver que hay dos problemas

1. chips informáticos modernos integrarán una caché L1, podemos entender que cada chip tiene un espacio de almacenamiento privado. Así que cuando la CPU diferente chip de computación para acceder a la misma dirección de memoria, el valor de la dirección de memoria tendrá varias copias a través de diferentes CPU chip de computación, cómo sincronizar estas copias?

2. CPU y la memoria caché de leer y escribir es tratar directamente, en lugar de tratar directamente con la memoria principal. Debido a que el tiempo de acceso a la memoria principal es normalmente de decenas a cientos de ciclos de reloj, y escribir una caché L1 requiere sólo 12 ciclos de reloj, y una escritura de la caché L2 tarda sólo varias decenas de ciclos de reloj. Escrita cuando el valor de caché de la CPU se escribe de nuevo en la principal? Si hay varios chips de computación se manejan de la misma dirección de memoria, la diferencia de tiempo es cómo hacer frente a este problema.

Para la primera pregunta, diferentes formas de procesar la arquitectura de hardware no es lo mismo. Tenemos que entender lo que el concepto de líneas de interconexión.

Un medio de comunicación de interconexión de procesador entre el procesador y la memoria principal y un procesador, hay dos estructuras básicas de interconexión: SMP (multiprocesamiento simétrico multiprocesamiento simétrico) y NUMA (memoria no uniforme de acceso a memoria no uniforme de acceso)

                                 

estructura del sistema SMP es muy común, porque son los más fáciles de construir muchos pequeños servidores que utilizan esta estructura. A través del bus de interconexión entre el procesador y la memoria, el procesador y la memoria son responsables de enviar y escuchar a la unidad de control del bus del bus de información de difusión. Pero al mismo tiempo, sólo un procesador (o controlador de memoria) de difusión en el bus, todos los procesadores se puede controlar.

Es fácil de ver, el uso de la estructura SMP cuello de botella autobús.

configuración del sistema nump, una serie de nodos interconectados por un par a la red de pares, como una pequeña Internet, cada nodo comprende uno o más procesadores y una memoria local. Un nodo de almacenamiento local es visible a otros nodos, puede estar formado de una memoria global compartida por todos los procesadores de todos los nodos con el almacenamiento local. Como puede verse, nump almacenamiento local es compartido, no es privado, y esto SMP es diferente. nump problema es la red de autobuses que la copia, la necesidad de procesador de protocolo más complejo accede a su propia memoria de acceso a la memoria del nodo más rápido que otros nodos. Escalabilidad nump bien, ahora tenemos una gran cantidad de servidores de tamaño medio que utilizan la estructura nump.

Para los mejores programadores, hay que entender es que la mayor línea de interconexión es un recurso importante, el uso de bueno o malo afectará directamente a la aplicación de los resultados del programa.

Después de aproximadamente una comprensión diferente de la estructura de interconexión, echamos un vistazo al protocolo de coherencia de caché. Es sobre todo manejar múltiples procesadores que se ocupan de una dirección de memoria principal.

MESI es un protocolo de coherencia de caché de la corriente principal, se ha utilizado en los procesadores Pentium y PowerPC. En él se definen varios estado del bloque de caché

Modificado (revisión): bloque de caché se ha modificado, debe ser escrita de nuevo a la memoria principal, otros procesadores no pueden almacenar en caché el bloque
exclusivo (mutex): bloque de caché no se ha modificado, el procesador y otros bloques de caché se pueden montar en esta
proporción (compartido): bloque de caché no se modifica, y los otros procesadores se pueden cargar en el bloque de memoria caché es
válido (no válido): el bloque de caché son datos no válidos

                            


La figura muestra el ejemplo de transición de estado de protocolo de coherencia de caché MESI.

1. En un procesador A lee datos de la dirección, una información almacenada en su memoria caché y fijados a exclusiva

2. En (b), cuando, se detecta el intento de procesador para leer datos de la misma dirección de b a a conflicto de direcciones, para responder a los datos. En este momento, un simultáneamente A y B se cargan en el estado del buffer compartido

3. En (c), cuando un B a una dirección de escritura compartida, entonces el estado se cambió a Modificado, y alerta de difusión A, dejarlo caché de bloques de estado se establece en no válida

4. d, cuando un intento de leer los datos de una, que transmite su petición, B puso modifica los datos A y envía a la memoria principal, y establece las dos copias del estado compartido para responder

Uno de los mayores problemas del protocolo de coherencia de caché es probable que la causa de coherencia de caché tormenta tráfico, antes de que veamos el autobús sólo puede ser utilizado por un procesador en un momento en que hay un gran número de caché se modifica, o el mismo bloque de caché se ha modificado cuando, una gran cantidad de tráfico de coherencia de caché para tomar el bus, que afecta a otras peticiones de lectura y escritura normales.

Uno de los ejemplos más comunes es que si varios subprocesos para la misma variable ha estado utilizando la operación del CAS, entonces habrá una gran cantidad de operaciones de modificación, lo que resulta en una gran cantidad de tráfico de coherencia de caché porque cada operaciones CAS cuestión será transmitido nota otros procesadores, lo que afecta el desempeño del programa.

 Para la segunda pregunta, cómo hacer frente a los datos modificados desde el caché a la memoria principal de la diferencia de tiempo, que se utiliza comúnmente para las barreras de memoria mango, consulte la comprensión en profundidad del modelo de memoria de Java (nueve) - comprensión barrera de memoria

 

Publicados 169 artículos originales · ganado elogios 6 · vistas 3508

Supongo que te gusta

Origin blog.csdn.net/weixin_42073629/article/details/104743313
Recomendado
Clasificación