Las entrevistas a menudo preguntan sobre bloqueos optimistas y bloqueos pesimistas, bloqueos giratorios y bloqueos mutex. Todos escuchenme

El bloqueo optimista y el bloqueo pesimista no son un bloqueo real, sino una idea de diseño. El bloqueo optimista y el bloqueo pesimista son esenciales para comprender la base de datos y los subprocesos múltiples de back-end, por lo que este artículo discutirá esto en detalle El concepto y la implementación de las dos cerraduras.

No me gusta ver lo que dice la gente "bloqueo optimista y bloqueo pesimista en Java" Tengo que pensar en quién es el propietario de cuál. . .

Cerradura optimista

Inserte la descripción de la imagen aquí
Bloqueo optimista, sabes su nombre, piensa en las cosas de forma muy pura, siempre piensa que los recursos y los datos no serán modificados por otros, por lo que las lecturas no se bloquearán, pero los bloqueos optimistas juzgarán al escribir operaciones Si se han modificado los datos actuales. Se pueden utilizar mecanismos como los números de versión.

El bloqueo optimista es principalmente adecuado para múltiples tipos de aplicaciones, lo que puede mejorar el rendimiento.

lograr

  1. Utilice un número entero que aumente automáticamente para representar el número de versión de los datos.
    Inserte la descripción de la imagen aquí
    Si estas escrituras dobles no interfieren entre sí, el macho busca, el número de versión es 0, el macho escribe, el número de versión +1; la hembra busca, el número de versión es 1 y la hembra escribe, el número de versión es 2.
    Si estas escrituras dobles interfieren entre sí, el macho busca, el número de versión es 0; el macho aún no ha escrito, la hembra busca, el número de versión es 0; el macho escribe, el número de versión es 1; la hembra escribe, se encuentra el número de versión Si el número no coincide, la escritura falla y la cantidad y el número de versión deben leerse nuevamente.

  2. Utilice la marca de tiempo para lograrlo.

Bloqueo pesimista

Inserte la descripción de la imagen aquí

El bloqueo pesimista es una especie de pensamiento pesimista. Siempre cree que puede ocurrir el peor de los casos. Cree que es probable que otros modifiquen los datos. Por lo tanto, el bloqueo pesimista siempre bloqueará los recursos o los datos al almacenar datos. Cuando otros subprocesos quieran solicitar este recurso, se bloquearán hasta que el bloqueo pesimista libere el recurso. Muchos de estos mecanismos de bloqueo se utilizan en bases de datos relacionales tradicionales, como bloqueos de filas, bloqueos de tablas, etc., bloqueos de lectura, bloqueos de escritura, etc., que están todos bloqueados antes de las operaciones. La realización del bloqueo pesimista a menudo se basa en la función de bloqueo de la propia base de datos.

lograr

Puede utilizar el mecanismo de bloqueo de la base de datos.

Bloqueo optimista frente a bloqueo pesimista

Solo puedo decir que cada uno tiene sus propios méritos.

El bloqueo optimista es adecuado para el caso de relativamente pocas escrituras, es decir, cuando los conflictos rara vez ocurren, lo que puede ahorrar la sobrecarga del bloqueo y aumentar el rendimiento general del sistema. Pero si los conflictos ocurren con frecuencia, esto en realidad reducirá el rendimiento, por lo que los bloqueos pesimistas son más apropiados en este caso.

El bloqueo pesimista provocará un acceso más prolongado a la base de datos y una concurrencia deficiente, especialmente para transacciones largas.
Las cerraduras optimistas se utilizan más en la realidad.

Poner el ejemplo anterior aquí se convierte en: después de que una de las partes obtiene el bloqueo, la otra parte espera hasta que una parte libera el bloqueo y la otra parte continúa operando.


Cerraduras giratorias y cerraduras mutex

Los bloqueos de giro y los bloqueos de mutex se han utilizado todo el tiempo, pero antes se llamaban simplemente bloqueos. Resulta que alguien tiene nombre.

espera () ¿no lo sabes? ¿no sabes timewait ()?

Bloqueo de exclusión mutua: bloqueo y espera
Bloqueo giratorio: espere dos veces y pregunte: ¿de acuerdo? ¡Estoy apurado! ¿Bueno? Date prisa. . . Jajajajaja

El principio de bloqueo de giro es relativamente simple. Si el subproceso que sostiene el bloqueo puede liberar el recurso de bloqueo en poco tiempo, los subprocesos que esperan el bloqueo competitivo no necesitan cambiar entre el estado del kernel y el estado del usuario para ingresar al estado de bloqueo, solo Espere un momento (giro), espere hasta que el hilo que sostiene el candado libere el candado para obtenerlo, evitando así el consumo de procesos de usuario y el cambio de kernel.

Debido a que los bloqueos de giro evitan la programación de procesos del sistema operativo y el cambio de subprocesos, los bloqueos de giro suelen ser adecuados para períodos cortos de tiempo. Por esta razón, el kernel del sistema operativo a menudo usa bloqueos de giro. Sin embargo, si el bloqueo está bloqueado durante mucho tiempo, el bloqueo de giro consumirá mucho rendimiento y evitará que otros subprocesos se ejecuten y programen. Cuanto más tiempo mantenga el hilo el bloqueo, mayor será el riesgo de que el programador del SO (sistema operativo) interrumpa el hilo que mantiene el bloqueo. Si ocurre una interrupción, otros hilos seguirán girando (tratando repetidamente de adquirir el bloqueo), y el hilo que sostiene el bloqueo no tiene la intención de liberarlo, lo que da como resultado un retraso indefinido hasta que el hilo que sostiene el bloqueo pueda completarse. Y suéltalo hasta ahora.

Una buena forma de resolver la situación anterior es establecer un tiempo de giro para el bloqueo de giro y liberar el bloqueo de giro inmediatamente cuando se acabe el tiempo. El bloqueo de giro adaptativo significa que el tiempo de giro no es fijo, sino que está determinado por el tiempo de giro anterior en el mismo bloqueo y el estado del bloqueo. Básicamente se considera que el tiempo para un cambio de contexto de hilo es el mejor. hora.


Optimización del flujo de cola larga

Simplemente deslízala y se acabó. ¿Estás seguro de que no lo recogerás?

Te ves tan bien, ¿no te concentras en eso? Jeje
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_43762191/article/details/108540297
Recomendado
Clasificación