Programación concurrente - visibilidad, cuestiones atómicas y el orden: Fallo fuente de programación concurrente

Programación concurrente - visibilidad, cuestiones atómicas y el orden: Fallo fuente de programación concurrente

Programación concurrente catálogo de la serie de belleza: https://www.cnblogs.com/binarylei/p/9569428.html

Esta es la primera programación concurrente, describe por qué la programación concurrente, y el análisis de las causas fundamentales del problema de programación concurrente - visibilidad, la atomicidad y ordenar tres áreas. El siguiente capítulo vamos a seguir para analizar la forma en la JVM es resolver estos tres problemas.

1. programa simultáneo escenas detrás de la historia

¿Por qué aprender programación concurrente, creo que las siguientes razones:

  1. CPU, memoria, discos duros y otros dispositivos de E / S, la diferencia de velocidad sobre el terreno en el cielo un día al año.
  2. La llegada de la era multi-núcleo, sino también para hacer pleno uso de la CPU.
  3. Para totalmente una CPU, se introduce una memoria caché, tiempo de CPU, hoja, mecanismos de optimización del compilador. Sin embargo, estas técnicas al mismo tiempo resolver el problema, sino que también trae hilo de seguridad. Así, mientras que el uso de una tecnología, debe quedar claro qué causó el problema y cómo evitar.

Competencia rendimiento 1,1 I / O dispositivo

Con los años, nuestros CPU, memoria, discos duros y otros dispositivos de E / S están en constante iteración, en constante movimiento en una dirección más rápida. Sin embargo, en este proceso de rápido desarrollo, existe una contradicción central siempre ha existido, es la diferencia de velocidad entre los tres.

  • CPU y la diferencia de velocidad de memoria pueden ser vívidamente descritos como: CPU cielo del día, la memoria está en el suelo de un año.
  • La memoria y los dispositivos de E / S, la diferencia de velocidad es aún mayor: la memoria está en el cielo un día, dispositivos I / O están en el suelo de una década.

Descripción: A partir de la gráfica, podemos ver claramente, cuanto más cerca del acceso a la CPU más rápida, pero la capacidad es menor. Nuestra CPU como una unidad, que por lo común de E / S velocidades dispositivos son los siguientes (sólo tenemos que centrarnos en las diferencias de magnitud diferente dispositivos de E / S, no se centran en valores absolutos):

CPU, memoria, discos duros y otros I / O de comparación el rendimiento del dispositivo de la fig.
dispositivo IO retrasado ancho de banda capacidad
UPC 1 - -
Cache (L1-L2-L3) 0,5 ~ 15ns 2 ~ 60 GB / s 1M
memoria 30 ~ 100 ns 2 ~ 12 GB / s 32GB ~ 256 GB
disco duro SSD 10us ~ 1 ns 50 MB ~ 12 GB / s > 1T
disco duro mecánico 5 ms ~ 2 ms 50 MB ~ 200 MB / s > 1T
NIC 100us ~ 1 ms 10 MB ~ 10 GB / s -

1.2 visibilidad, atomicidad, problema de ordenación

la ejecución de la CPU a menudo necesitan la memoria de acceso, algunos también tener acceso al disco duro, según la teoría del cubo (un cubo puede ser ¿Cuánta agua depende de su pieza más corta de la madera), el rendimiento global del programa depende de las operaciones más lentas - leer y escribir me E / S de los dispositivos, que unilaterales mejorar el rendimiento de la CPU no es válido. Para el uso racional de rendimiento de la CPU, el equilibrio de diferencia de velocidad entre estos tres, la arquitectura de computadores, sistemas operativos, compiladores han contribuido, refleja principalmente en:

  • Visibilidad : la CPU aumenta la caché para el equilibrio y la diferencia de velocidad de memoria. Pero la memoria caché también trae problemas de visibilidad.
  • La atomicidad : sistema operativo añade procesos, hilos, por división de tiempo CPU multiplexado, y por lo tanto la diferencia de la CPU ecualización velocidad y los dispositivos de E / S. Pero también trae problemas atómicas interruptor hilo.
  • Ordenando : el compilador orden de ejecución de instrucciones de optimización, por lo que el tampón puede ser un uso más racional. Sin embargo, la optimización del compilador también puede traer problemas de orden.

2. Visibilidad

Un hilo de variables compartidas modificado, otro hilo puede ver inmediatamente, llamamos a la visibilidad . CPU caché conduce a problemas de visibilidad en Java, proporciona la palabra clave volátiles a resolver el problema de la visibilidad.

En primer lugar, la caché aunque eficiente, pero ya que utilizará la memoria caché de los problemas de inconsistencia caché, tales como a menudo utilizamos caché Redis. Por la misma razón, la memoria caché de la CPU puede llevar a inconsistencias, es la visibilidad. Nos fijamos en la arquitectura de la CPU, se detalla la arquitectura arquitectura de memoria caché de la CPU .

Descripción: "CPU" y la interacción "Caché / memoria" es el siguiente: Después de recibir la instrucción, para encontrar un caché de la CPU (caché L1), sin embargo, debido a la menor capacidad de la memoria intermedia, que no siempre se golpeó. A continuación, la CPU va a seguir investigando para la caché de segundo nivel, y así sucesivamente: L1 Cache -> L2 Cache -> L3 Cache -> RAM -> 硬盘.

Si la era de un solo núcleo, todas las instrucciones se están ejecutando en la misma CPU, no problemas de almacenamiento en caché inconsistentes. Pero el núcleo varias veces, la operación es enhebrar una caché en la CPU-1, y el hilo B es una operación de la memoria caché en la CPU-2. Obviamente, esta operación el tiempo de la rosca Una variable para el hilo B no tiene la visibilidad.

Visibilidad emitirá en el siguiente ejemplo.

Descripción: En este ejemplo, porque el hilo B se detiene el hilo A, llamar directamente threadA.stop () será un punto muerto y otras cuestiones. Por lo general, para detener el hilo, funcionando a menudo identifica las discusiones se están ejecutando con un marcador, cuando queremos detener el hilo, llame al método de parada. Sin embargo, después de ejecutar el subproceso B modificar directamente las variables, esta variable puede no ser inmediatamente sincronizado ejecutando en la memoria principal, hilo A no puede leer la última variable de funcionamiento de la memoria principal, lo que conduce a problemas de visibilidad.

3. atomicidad

características de funcionamiento de uno o más de los procesos ejecutados por la CPU no se interrumpe, lo llamamos atómica . CPU es asegurar que la instrucción de la CPU nivel atómico, más que el operador del lenguaje de alto nivel. Hilo de conmutación LED a los problemas de atomicidad en Java, proporciona una palabra clave sincronizada atómica a resolver el problema.

El sistema operativo permite a un proceso para realizar un corto período de tiempo, como 50 milisegundos, 50 milisegundos después de que el sistema operativo se vuelva a seleccionar un proceso para ejecutar (que llamamos "intercambio de tareas"), este 50 milisegundos llamado "segmento de tiempo de CPU."

sistema basado en la CPU proceso de programación operativo anterior, los diferentes procesos no se comparten espacio en la memoria, por lo que el proceso es necesario para hacer la dirección de memoria mapeada interruptor de conmutación de tareas, y todos los hilos de un proceso para crear, es un espacio de memoria compartida, por lo hilo para hacer el coste de conmutación tarea es muy baja. Los sistemas operativos modernos se basan en la programación de subprocesos más ligero, y ahora hemos mencionado "conmutación de tareas" se refieren a "interruptor de hilo."

programas concurrentes Java se basan en multi-hilo, naturalmente, se trata de cambiar de tarea, la tarea de cambiar la sincronización de la mayor parte de ellos en el extremo de la porción de tiempo. básicamente estamos utilizando la programación en lenguaje de alto nivel, en un lenguaje de alto nivel de los estados requieren a menudo múltiples instrucciones de la CPU se ha completado. Como el recuento ++, necesitan por lo menos tres instrucciones de la CPU.

  • Instrucción 1: En primer lugar, la necesidad de variable de recuento de memoria en registros de la CPU;
  • Instrucción 2: Después de ello, un 1 en un registro;
  • Instrucción 3: Por último, los resultados se escriben en la memoria (mecanismo de caché de escritura puede conducir a una caché de la CPU en lugar de la memoria).

Count ++ o en el ejemplo anterior. A y B son dos hilos se ejecutan simultáneamente recuento ++, incluso contar el uso de la retórica volátil, se espera que el valor del resultado es 2, pero en realidad puede ser 1.

Resumen: La conmutación de tareas del sistema operativo puede ocurrir después de cualquier ejecución de la instrucción de la CPU es completa, en lugar de una declaración lenguaje de alto nivel. CPU puede garantizar operaciones atómicas son a nivel de instrucción de la CPU, en lugar de la lengua de los operadores avanzados, lo cual es contrario a la intuición nuestro lugar. Por lo tanto, muchas veces tenemos que garantizar que las operaciones atómicas en el nivel del lenguaje de alto nivel.

4. orden

Con el fin de optimizar el rendimiento de los compiladores, a veces cambiando el orden de las declaraciones en el programa. En Java, proporciona un pasa-antes de principio ordenador para resolver el problema.

5. Resumen

En la visibilidad introducción, atomicidad, pedidos, cuando se mencionan específicamente caché problemas de visibilidad causados, el cambio de hilo cuestiones atómicas traído compilador de optimización de problemas de ordenación causado. De hecho, la caché, hilos, con fines de optimización del compilador y escribimos programas concurrentes con el mismo fin, es mejorar el desempeño del programa. Pero al mismo tiempo para resolver un problema técnico, que sin duda traerá otro problema, por lo tanto que el uso de una tecnología, debe quedar claro qué causó el problema y cómo evitar.


Las intenciones de grabar un poco cada día. Tal vez el contenido no es importante, pero el hábito es muy importante!

Supongo que te gusta

Origin www.cnblogs.com/binarylei/p/12533857.html
Recomendado
Clasificación