Programación concurrente (1): palabra clave volátil

Uno: modelo de memoria JAVA

 

 

Puntos de conocimiento involucrados:

Caché multinivel, protocolo MESI, protocolo de coherencia de caché, mecanismo de rastreo de bus, operación atómica (8 operaciones atómicas)

 

 

 La función principal de la palabra clave volátil es garantizar la visibilidad de las variables y luego otra función es evitar el reordenamiento de las instrucciones. Por qué

 

Visibilidad: el protocolo MESI (un protocolo de coherencia de caché que admite la estrategia de reescritura) y el mecanismo de rastreo de bus determinan que la volatilidad puede garantizar la visibilidad;

Explicación detallada: el protocolo MESI estipula en qué circunstancias los datos en la memoria de trabajo (también llamada caché) se vuelven a escribir en la memoria principal, y el mecanismo de rastreo de bus compara las variables en la memoria de trabajo (caché) con las variables en la memoria principal. Combinado, el protocolo MESI estipula que la operación de escritura de la memoria de trabajo actualizará sincrónicamente el valor variable de la memoria principal, y el mecanismo de rastreo de bus determina si el valor variable actual de la operación de escritura es consistente con la memoria principal. (Indica que el valor de la variable de memoria principal no ha sido modificado por otros subprocesos).

Protocolo MESI: modificado, exclusivo, compartido, inválido; un protocolo de coherencia de caché que admite la estrategia de reescritura.

 

Para obtener detalles del acuerdo MESI, consulte: https://www.cnblogs.com/yanlong300/p/8986041.html

Prevenga la reorganización de la instrucción: la razón es la barrera de la memoria

Explicación detallada: las barreras de memoria incluyen Store Memory Barrier (barrera de memoria de escritura), Load Memory Barrier (barrera de memoria de lectura), las operaciones atómicas correspondientes son almacenar y cargar;

 

 

bloqueo: cuando se desbloquea, jvm forzará la actualización de la memoria caché de la CPU, haciendo que el hilo actual cambie y sea visible para otros hilos.

volátil: marque el campo volátil, durante la operación de escritura, forzará la actualización de la memoria caché de la CPU, marcará el campo volátil y leerá la memoria directamente cada vez que se lea. (Barreras de StoreLoad)

final: el compilador Just-in-time insertará una barrera de memoria después de la operación de escritura final para prohibir la reordenación y garantizar la visibilidad

 

Dos: tres características importantes de la programación concurrente.

 

  1. Atomicidad: una operación u operaciones múltiples, o bien todas las operaciones se ejecutan y no serán interrumpidas por ningún factor, o todas las operaciones se ejecutan o no se ejecutan. sincronizado puede garantizar la atomicidad de los fragmentos de código.
  2. Visibilidad: cuando una variable modifica una variable compartida, otros subprocesos pueden ver inmediatamente el último valor después de la modificación. La palabra clave volátil puede garantizar la visibilidad de las variables compartidas.
  3. Orden: el orden del código en el proceso de ejecución, la optimización de Java en el compilador y el tiempo de ejecución, el orden de ejecución del código puede no ser el orden cuando se escribe el código (reordenamiento de instrucciones). La palabra clave volátil puede prohibir que las instrucciones reordenen la optimización.

 

Tres: la diferencia entre la palabra clave sincronizada y la palabra clave volátil

 

  • La palabra clave volátil es una implementación ligera de sincronización de subprocesos, por lo que el rendimiento volátil es definitivamente mejor que la palabra clave sincronizada. Pero la palabra clave volátil solo puede usarse para variables y la palabra clave sincronizada puede modificar métodos y bloques de código. La palabra clave sincronizada se implementó después de JavaSE1.6. Incluye principalmente bloqueos sesgados y bloqueos livianos introducidos para reducir el consumo de rendimiento causado por la adquisición y liberación de bloqueos, y varias otras optimizaciones. La eficiencia de ejecución se ha mejorado significativamente y el desarrollo real está en progreso. Hay más escenarios donde se usa la palabra clave sincronizada.
  • El acceso multiproceso a la palabra clave volátil no se bloqueará, mientras que la palabra clave sincronizada puede bloquear
  • La palabra clave volátil puede garantizar la visibilidad de los datos, pero no puede garantizar la atomicidad de los datos. Ambas palabras clave sincronizadas están garantizadas.
  • La palabra clave volátil se utiliza principalmente para resolver la visibilidad de las variables entre varios subprocesos, mientras que la palabra clave sincronizada resuelve la sincronización de acceder a los recursos entre varios subprocesos.

Publicado 27 artículos originales · elogiado 0 · visitas 9932

Supongo que te gusta

Origin blog.csdn.net/weixin_38246518/article/details/105543158
Recomendado
Clasificación