Galería de mapas mentales concurrencia de Java
Este es un mapa mental sobre la concurrencia de Java. El contenido principal incluye: bloqueos, grupos de subprocesos, contenedores concurrentes y conceptos básicos.
Editado a las 2024-04-22 19:41:17,Este es un mapa mental sobre una breve historia del tiempo. "Una breve historia del tiempo" es una obra de divulgación científica con una influencia de gran alcance. No sólo presenta los conceptos básicos de cosmología y relatividad, sino que también analiza los agujeros negros y la expansión. del universo. temas científicos de vanguardia como la inflación y la teoría de cuerdas.
¿Cuáles son los métodos de fijación de precios para los subcontratos de proyectos bajo el modelo de contratación general EPC? EPC (Ingeniería, Adquisiciones, Construcción) significa que el contratista general es responsable de todo el proceso de diseño, adquisición, construcción e instalación del proyecto, y es responsable de los servicios de operación de prueba.
Los puntos de conocimiento que los ingenieros de Java deben dominar en cada etapa se presentan en detalle y el conocimiento es completo, espero que pueda ser útil para todos.
Este es un mapa mental sobre una breve historia del tiempo. "Una breve historia del tiempo" es una obra de divulgación científica con una influencia de gran alcance. No sólo presenta los conceptos básicos de cosmología y relatividad, sino que también analiza los agujeros negros y la expansión. del universo. temas científicos de vanguardia como la inflación y la teoría de cuerdas.
¿Cuáles son los métodos de fijación de precios para los subcontratos de proyectos bajo el modelo de contratación general EPC? EPC (Ingeniería, Adquisiciones, Construcción) significa que el contratista general es responsable de todo el proceso de diseño, adquisición, construcción e instalación del proyecto, y es responsable de los servicios de operación de prueba.
Los puntos de conocimiento que los ingenieros de Java deben dominar en cada etapa se presentan en detalle y el conocimiento es completo, espero que pueda ser útil para todos.
concurrencia de Java
concepto basico
proceso
montón
área del método
El montón y el área de método son recursos compartidos por todos los subprocesos. El montón es la mayor parte de la memoria en el proceso y se usa principalmente para almacenar objetos recién creados (casi todos los objetos asignan memoria aquí. El área de método se usa principalmente para almacenar objetos cargados). objetos Información de clase, constantes, variables estáticas, código compilado por un compilador justo a tiempo y otros datos.
hilo
contador de programa
Pila de máquinas virtuales
pila de métodos nativos
Puede haber varios subprocesos en un proceso, y varios subprocesos comparten los recursos del montón y del área de método (metaespacio después de JDK1.8) del proceso, pero cada subproceso tiene su propio contador de programa, pila de máquina virtual y pila de método local.
concurrente
paralelo
Puede provocar fácilmente pérdidas de memoria, interbloqueos e inseguridad de subprocesos.
Sincronizar
asincrónico
Seguridad del hilo
Crear hilo
Estado y ciclo de vida del hilo
NUEVO
Listo (ejecutable)
Correr
Obstruido
Bloqueo sincrónico (Bloqueado)
Esperando bloqueo (ESPERANDO)
Bloqueo de tiempo de espera en espera (TMME-WAITING)
Muerte (Muerto/TERMINADO)
Cambio de contexto de hilo
punto muerto del hilo
Cuatro condiciones necesarias para el estancamiento
Cómo evitar un punto muerto
Cómo solucionar problemas
Gráfico: jconsole
jps -l descubre el número de proceso del programa, número de proceso jstack
JMM
definición
fondo
Coherencia de CPU y caché
Optimización del procesador
Reordenación paralela de instrucciones
Reordenamiento de optimización del compilador
Reordenación del sistema de memoria
Teoría de la concurrencia
reglas como si fueran seriales
regla de sucede antes
reglas de secuencia del programa
Supervisar las reglas de bloqueo
Reglas de variables volátiles
regla de transitividad
regla de inicio ()
reglas de unión ()
Tres características principales
atomicidad
visibilidad
Orden
Cómo resolver problemas de concurrencia
Tres palabras clave principales
volátil
visibilidad
sucede antes del principio
principio
escribir la semántica de la memoria
Leer la semántica de la memoria.
Orden
Implementación de la semántica de la memoria.
sincronizado
efecto
atomicidad
Orden
visibilidad
escribir la semántica de la memoria
Leer la semántica de la memoria.
Uso
Decorar métodos de instancia
Modificar métodos estáticos
Decorar bloques de código
principio
bloque de código sincronizado
método de sincronización
modelo de objetos java
encabezado de objeto
Marcar palabra
Punto de clase
Datos de instancia
Alineación de bytes
actualización de bloqueo
sin cerradura
Estado de bloqueo
bloqueo de polarización
Estado de bloqueo
Tiempo de actualización
Operaciones específicas
beneficio
La ID del hilo sesgado no es coherente con la ID del hilo actual.
Éxito en la competencia
La competencia falló
Realización técnica
cerradura ligera
Estado de bloqueo
Tiempo de actualización
efecto
Girar
La diferencia entre bloqueo de sesgo y bloqueo de sesgo
Cerradura pesada
Estado de bloqueo
Tiempo de actualización
principio
optimización jdk1.6
bloqueo de giro
bloqueo de giro adaptativo
eliminación de bloqueo
rugosidad de la cerradura
bloqueo de polarización
cerradura ligera
final
efecto
Reglas de reordenamiento
Escribir reglas de reordenamiento para campos finales
Reordenación de reglas para leer campos finales
barrera de la memoria
contenedor concurrente
Lista
Copiar en escritura Lista de matrices
Vector
Colocar
Copiar en escrituraArraySet
Mapa
Mapa de hash concurrente
Mapa de lista de saltos concurrente
Tabla de picadillo
cola
ArrayBloqueoCola
Cola de bloqueo vinculada
Cola de bloqueo de prioridad
Cola síncrona
Grupo de subprocesos
definición
Ventaja
Reducir el consumo de recursos
Mejorar la velocidad de respuesta
Mejorar la capacidad de gestión de subprocesos
Como crear
Ejecutores
Grupo de subprocesos fijos
Ejecutor de hilo único
Probablemente se utilice un LinkedBlockingQueue ilimitado. La longitud máxima de la cola de tareas es Integer.MAX_VALUE. Se puede acumular una gran cantidad de solicitudes, lo que resulta en OOM.
Grupo de subprocesos en caché
Se utiliza la cola de sincronización SynchronousQueue y el número de subprocesos que se permite crear es Integer.MAX_VALUE.
Grupo de subprocesos programado
Se utiliza la cola de bloqueo retardado ilimitada DelayedWorkQueue. La longitud máxima de la cola de tareas es Integer.MAX_VALUE, lo que puede acumular una gran cantidad de solicitudes, lo que resulta en OOM.
ThreadPoolEjecutor
Parámetros comunes
tamaño de grupo central
tamaño máximo de piscina
cola de trabajo
manteneralivetime
unidad
hiloFábrica
manipulador
Política de aborto
Política de ejecuciones de llamadas
Descartar política
Descartar política más antigua
Proceso de manejo de tareas.
Cómo configurar el tamaño del grupo de subprocesos
Algoritmo teórico
método empírico
Tareas intensivas de CPU (N 1)
Tareas intensivas de E/S (2N)
clase futura
Cancelar tarea
Determinar si la tarea ha sido cancelada
Determinar si la tarea se ha completado.
Obtener resultados de ejecución de tareas
defecto
Futuro Completable
Resolver las deficiencias del futuro.
ventaja
Etapa de finalización
Cerrar
concepto basico
cerradura pesimista
ventaja
El coste del bloqueo pesimista es fijo.
defecto
La feroz competencia de bloqueo puede provocar el bloqueo de subprocesos
Una gran cantidad de subprocesos bloqueados provocarán un cambio de contexto del sistema Aumentar la sobrecarga de rendimiento del sistema
El bloqueo pesimista también puede causar problemas de interbloqueo
Escena aplicable
Escriba múltiples escenarios y competencia feroz (para evitar fallas frecuentes y reintentos que afecten el rendimiento)
bloqueo optimista
ventaja
No hay competencia de bloqueo que provoque el bloqueo de subprocesos.
No habrá problema de punto muerto
defecto
Si los conflictos ocurren con frecuencia (se producen muchas escrituras), habrá fallas y reintentos frecuentes.
Escena aplicable
Múltiples escenarios de lectura, menos competencia (puede evitar bloqueos frecuentes que afecten el rendimiento)
Plan de IMPLEMENTACION
Mecanismo de número de versión
algoritmo CAS
preguntas ABA
Tiempo de ciclo largo y altos gastos generales
Solo se garantizan operaciones atómicas en una variable compartida
Hilo local
efecto
principio
Algoritmo hash
Conflicto de hash
Problema de pérdida de memoria
razón
solución
AQS
Idea principal
estado
Cola CLH
estructura
principio
ventaja
Excelente rendimiento, bajos gastos generales para adquirir y desbloquear cerraduras.
cerradura justa
Sencillo de implementar y fácil de entender.
Fuerte escalabilidad
defecto
La operación de giro provocará una gran sobrecarga de la CPU cuando el bloqueo se mantenga durante mucho tiempo.
Función única y no puede admitir funciones complejas
Variantes de cohorte CLH
AQS cambia la operación de giro a la operación de bloqueo del hilo
Mejoras para bloquear estructuras de datos.
Ampliar el estado de cada nodo.
SEÑAL
PROPAGAR
CONDICIÓN
CANCELADO
Mantener explícitamente los nodos predecesores y sucesores
Optimización del GC auxiliar, como establecer explícitamente el nodo de salida de cola en nulo
Diagrama esquemático
bloqueo compartido
cerradura exclusiva
Bloqueo reentrante
qué es
principio
Proceso de bloqueo injusto
Cuando el hilo uno se bloquea con éxito
Datos internos de AQS
Error en el bloqueo del hilo dos
Situación de colas en CLH
Error en el bloqueo del hilo tres
Proceso de bloqueo de bloqueo justo
Proceso de desbloqueo
El proceso de liberación de la cerradura.
Esperando datos de la cola
datos finales de la cola
Condición
Principio de implementación
Bloqueo de lectura y escritura reentrante
Escena aplicable
¿Puede un hilo adquirir un bloqueo de escritura si tiene un bloqueo de lectura?
El bloqueo de lectura no se puede actualizar a bloqueo de escritura
Semáforo
Dos modos
modo justo
Modelo injusto
principio
cuenta atrás
efecto
principio
Desechable
Barrera cíclica
clase atómica
tipo básico
Entero atómico
atómicolargo
AtómicoBooleano
tipo de matriz
AtomicIntegerArray
AtómicoLongArray
Matriz de referencia atómica
tipo de referencia
Referencia atómica
Referencia Atómica Estampada
Tipo de modificación de propiedad del objeto
AtomicIntegerFieldUpdater
Actualizador AtomicLongField
Actualizador de campo de referencia atómica