Hable acerca de por qué el rendimiento de los bloqueos injustos es mayor

En Java, tanto el bloqueo sincronizado como el ReentrantLock usan bloqueos injustos de forma predeterminada, y las razones para usar bloqueos injustos son las mismas, ambas para mejorar el rendimiento del programa. Entonces, ¿por qué los bloqueos injustos pueden mejorar el rendimiento? Echemos un vistazo a continuación.

bloqueo injusto

Bloqueo injusto: El orden en que cada subproceso adquiere bloqueos es aleatorio y no sigue la regla del orden de llegada. Cualquier subproceso puede adquirir y poseer directamente un bloqueo en un momento determinado.

Esto es como ir a repostar. Cuando llegué a la gasolinera, me encontré con que alguien estaba repostando delante de mí, así que pasé el vibrato en el coche. Después de un rato, el coche de delante terminó de repostar y se fue. en Douyin en el coche. Sin embargo, otro automóvil llegó a la estación de servicio en ese momento y descubrió que había una pistola de aceite de repuesto, por lo que llenó el aceite antes que el hermano Lei. Las pistolas de aceite aquí son candados, y las pistolas de aceite no se obtienen en el orden de llegada, lo cual es un candado injusto.

cerradura justa

Bloqueo justo: el orden en que cada subproceso adquiere el bloqueo se adquiere en el orden en que los subprocesos acceden al bloqueo, y el subproceso frontal siempre adquiere el bloqueo primero.

Esto es como hacer cola para pasar la cabina de peaje en la autopista, todos los autos tienen que esperar en fila para pasar y el primer auto debe pasar primero por la cabina de peaje.

comparación de rendimiento

Los resultados de la prueba de rendimiento de bloqueos justos y bloqueos injustos son los siguientes. Los siguientes datos de prueba provienen de la "Práctica de programación concurrente de Java":

Se puede ver a partir de los resultados anteriores que la tasa de rendimiento (la tasa promedio de adquisición exitosa de bloqueos por unidad de tiempo) usando bloqueos injustos es mucho más alta que la de bloqueos justos.

análisis de rendimiento

Aunque los datos de prueba anteriores ilustran los resultados, ¿no explican por qué el rendimiento de los bloqueos injustos es mayor? Entonces, a continuación, obtenemos la respuesta a esta pregunta analizando los bloqueos justos y los procesos de ejecución injustos.

Proceso de ejecución de bloqueo justo

Al adquirir un bloqueo, primero agregue el subproceso al final de la cola de espera y duerma. Cuando un subproceso se quede sin bloqueos, despertará el subproceso al principio de la cola de espera para intentar adquirir el bloqueo. en el que se usan los bloqueos es también la secuencia en la cola. En orden, en todo el proceso, el subproceso cambiará del estado de ejecución al estado de suspensión, y luego restaurará del estado de suspensión al estado de ejecución, pero cada vez el subproceso duerme y se reanuda, debe convertirse del estado de usuario al estado del kernel, y esta transición de estado es relativamente lenta, por lo que la velocidad de ejecución del bloqueo justo será más lenta.

Modo de usuario y modo kernel

Modo de usuario: cuando un proceso está ejecutando el propio código del usuario, se dice que está en el estado de ejecución del usuario. Modo kernel: cuando una tarea (proceso) ejecuta una llamada al sistema y cae en la ejecución del código del kernel, llamamos al proceso en el estado de ejecución del kernel. En este momento, el procesador se ejecuta en el código del kernel con el nivel de privilegio más alto. .

¿Por qué separar el modo kernel y el modo usuario?

Suponiendo que no hay distinción entre el modo kernel y el modo de usuario, el programa puede leer y escribir recursos de hardware a voluntad, como leer y escribir y asignar memoria a voluntad. De esta manera, si el programador escribe accidentalmente contenido inapropiado en un lugar donde no debe escribirse, es probable que provoque que el sistema se bloquee.

Con la distinción entre el modo de usuario y el modo kernel, el programa realizará una serie de verificaciones e inspecciones al realizar una determinada operación, y luego podrá operar los recursos normalmente después de confirmar que no hay ningún problema, por lo que no se preocupará por encender accidentalmente Cuando el sistema está roto, es decir, con la distinción entre el modo kernel y el modo de usuario, el programa puede ejecutarse de manera más segura, pero al mismo tiempo, cambiar entre los dos modos causará una cierta sobrecarga de rendimiento.

Proceso de ejecución de bloqueo injusto

Cuando un subproceso adquiere un bloqueo, primero intentará adquirir el bloqueo a través de CAS. Si la adquisición es exitosa, será el propietario directo del bloqueo. Si no logra adquirir el bloqueo, ingresará a la cola de espera y esperará al siguiente. intente adquirir la cerradura. La ventaja de esto es que la adquisición de bloqueos no necesita seguir la regla del orden de llegada, evitando así la operación de suspensión y recuperación de subprocesos, acelerando así la eficiencia de ejecución del programa.

Por ejemplo, fui a una pequeña sala de negocios para manejar el negocio de la transferencia de red. Después de ir allí, encontré a alguien frente a mí haciendo negocios, así que le dije a la señora que estaba al frente (que manejaba el negocio), "tómese un descanso". en la puerta, terminará el negocio más tarde, vaya a Llámeme a la puerta ", la joven también es amable, por lo que aceptó de inmediato.

Pero hay un período de inactividad entre el momento en que la dama me llama después de terminar el negocio y cuando vuelvo al mostrador para manejar el negocio, que es el mismo que el tiempo de inactividad entre la espera de hilos en la cola para despertar y reanudar la ejecución. , Y en este tiempo libre, otro viejo Li vino a la sala de negocios para pagar la factura telefónica. Después de que Lao Li pagó la factura telefónica, acabo de regresar y puedo manejar el negocio directamente. Esta es una situación de "tres victorias". .

Lao Li no tiene que hacer cola detrás de mí para pagar la factura telefónica, y yo no tengo que esperar a que Lao Li pague la factura telefónica antes de pasar por el proceso de transferencia, y la eficiencia del manejo comercial del vendedor es mejorado dentro de la unidad de tiempo, y ella puede irse a casa temprano, que es la llamada "triple victoria". Realice más tareas en menos tiempo, que es la ventaja de los bloqueos injustos .

Resumir

En este artículo, presentamos las definiciones y los procesos de ejecución de bloqueos justos y bloqueos injustos. A partir de los detalles de los procesos de ejecución de los dos, podemos ver que debido a que los bloqueos injustos no necesitan ejecutarse en orden (secuencial), los bloqueos subsiguientes también puede intentar adquirir bloqueos directamente. No hay pasos para bloquear y reanudar la ejecución, por lo que será más eficaz.

Supongo que te gusta

Origin blog.csdn.net/Java_LingFeng/article/details/128788311
Recomendado
Clasificación