Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cuáles son los distintos bloqueos en Python?

¿Cuáles son los distintos bloqueos en Python?

Una lista aproximada:

1. Bloqueo global de intérprete (GIL)

1 ¿Qué es un bloqueo global de intérprete?

Cada A. La CPU solo puede ejecutar un subproceso al mismo tiempo, por lo que otros subprocesos deben esperar al intérprete global de ese subproceso. El intérprete global solo se puede utilizar después de que desaparezcan los derechos de uso. Incluso si varios subprocesos no se afectan directamente entre sí. proceso, solo un subproceso usa la CPU y este mecanismo se denomina bloqueo global de intérprete (GIL). El diseño de GIL simplifica la implementación de CPython, de modo que el modelo de objetos incluye tipos integrados clave, como diccionarios, etc., que están implícitos y se puede acceder a ellos al mismo tiempo. Bloquear el intérprete global facilita la implementación de subprocesos múltiples. Se admite, pero también pierde las capacidades de computación paralela de los hosts multiprocesador.

2. Los beneficios de los bloqueos de intérpretes globales

1) Los beneficios de evitar una gran cantidad de bloqueos y desbloqueos

2) Hacer que los datos sean más seguros y resolutivos Integridad de datos y sincronización de estado entre subprocesos múltiples

3. Desventajas del intérprete global

Los procesadores multinúcleo degeneran en procesadores de un solo núcleo, que solo pueden ser concurrentes pero no paralelos.

4. El papel de GIL:

En situaciones de subprocesos múltiples, debe haber competencia por los recursos. GIL es garantizar que los subprocesos a nivel de intérprete solo utilicen recursos compartidos (cpu). ).

2. Bloqueo de sincronización

1. ¿Qué es el bloqueo de sincronización?

Un subproceso bajo un proceso al mismo tiempo solo puede usar una CPU. Para garantizar que la CPU ejecute el programa bajo este subproceso dentro de un período de tiempo, se debe usar un bloqueo de sincronización.

2. ¿Por qué utilizar el bloqueo de sincronización?

Porque es posible que cuando un subproceso esté usando la CPU, el programa bajo el subproceso pueda encontrar operaciones de IO y la CPU cambie a otros subprocesos, lo que puede afectar la integridad de los resultados.

3. ¿Cómo utilizar el bloqueo de sincronización?

Solo es necesario agregar operaciones de bloqueo y liberación de bloqueo antes y después de la operación de los datos públicos.

4. El uso de bloqueos de sincronización:

Para garantizar que los programas escritos por usted mismo a nivel de intérprete solo puedan utilizar recursos compartidos, se generan bloqueos de sincronización.

3. Punto muerto

1. ¿Qué es un punto muerto?

Se refiere a un fenómeno en el que dos o más subprocesos o procesos se esperan entre sí debido a la competencia por los recursos o a una secuencia inadecuada de avance del programa durante la ejecución de un programa.

2. ¿Cuáles son las condiciones necesarias para que se produzca un punto muerto?

Condiciones de exclusión mutua, condiciones de solicitud y retención, condiciones de no privación, condiciones de espera de bucle

3. ¿Cuáles son los métodos básicos para lidiar con los puntos muertos?

Prevenir el punto muerto, evitar el punto muerto (algoritmo bancario), detectar el punto muerto (asignación de recursos), aliviar el punto muerto: privar de recursos, cancelar el proceso

4. p>En Python, para admitir múltiples solicitudes para el mismo recurso en el mismo hilo, Python proporciona bloqueos reentrantes. Este RLock mantiene internamente un bloqueo y una variable de contador. El contador registra el número de adquisiciones, de modo que el recurso puede ser requerido varias veces. Hasta que se liberen todas las adquisiciones de un subproceso, otros subprocesos pueden obtener recursos. Los bloqueos recursivos se dividen en bloqueos recursivos y bloqueos no recursivos.

5. Bloqueo optimista

Suponga que no se producirán conflictos de concurrencia y solo verifique si se viola la integridad de los datos al enviar la operación.

6. Bloqueo pesimista

Suponiendo que se producirán conflictos de concurrencia, se bloquearán todas las operaciones que puedan violar la integridad de los datos.

Los métodos de bloqueo más utilizados en Python: bloqueos de exclusión mutua, bloqueos reentrantes, bloqueos mutuos iterativos, bloqueos de llamadas mutuas y bloqueos de giro se enumeran de forma aproximada:

1.

1. ¿Qué es un bloqueo de intérprete global?

Cada CPU solo puede ejecutar un subproceso al mismo tiempo, luego otros subprocesos deben esperar el bloqueo de intérprete global del subproceso. , el intérprete global solo se puede usar después de que desaparezcan los derechos de uso. Incluso si varios subprocesos no se afectan directamente entre sí, solo un subproceso usa la CPU en el mismo proceso. Este mecanismo se llama Bloqueo de intérprete global (GIL). El diseño de GIL simplifica la implementación de CPython, de modo que el modelo de objetos incluye tipos integrados clave, como diccionarios, etc., que están implícitos y se puede acceder a ellos al mismo tiempo. Bloquear el intérprete global facilita la implementación de subprocesos múltiples. Se admite, pero también pierde las capacidades de computación paralela de los hosts multiprocesador.

2. Los beneficios de los bloqueos de intérpretes globales

1) Los beneficios de evitar una gran cantidad de bloqueos y desbloqueos

2) Hacer que los datos sean más seguros y resolutivos Integridad de datos y sincronización de estado entre subprocesos múltiples

3. Desventajas del intérprete global

Los procesadores multinúcleo degeneran en procesadores de un solo núcleo, que solo pueden ser concurrentes pero no paralelos.

4. El papel de GIL:

En situaciones de subprocesos múltiples, debe haber competencia por los recursos. GIL es garantizar que los subprocesos a nivel de intérprete solo utilicen recursos compartidos (cpu). ).

2. Bloqueo de sincronización

1. ¿Qué es el bloqueo de sincronización?

Un subproceso bajo un proceso al mismo tiempo solo puede usar una CPU. Para garantizar que la CPU ejecute el programa bajo este subproceso dentro de un período de tiempo, se debe usar un bloqueo de sincronización.

2. ¿Por qué utilizar el bloqueo de sincronización?

Porque es posible que cuando un subproceso esté usando la CPU, el programa bajo el subproceso pueda encontrar operaciones de IO y la CPU cambie a otros subprocesos, lo que puede afectar la integridad de los resultados.

3. ¿Cómo utilizar el bloqueo de sincronización?

Solo es necesario agregar operaciones de bloqueo y liberación de bloqueo antes y después de la operación de los datos públicos.

4. El uso de bloqueos de sincronización:

Para garantizar que los programas escritos por usted mismo a nivel de intérprete solo puedan utilizar recursos compartidos, se generan bloqueos de sincronización.

3. Punto muerto

1. ¿Qué es un punto muerto?

Se refiere a un fenómeno en el que dos o más subprocesos o procesos se esperan entre sí debido a la competencia por los recursos o a una secuencia inadecuada de avance del programa durante la ejecución de un programa.

2. ¿Cuáles son las condiciones necesarias para que se produzca un punto muerto?

Condiciones de exclusión mutua, condiciones de solicitud y retención, condiciones de no privación, condiciones de espera de bucle

3. ¿Cuáles son los métodos básicos para lidiar con los puntos muertos?

Prevenir el punto muerto, evitar el punto muerto (algoritmo bancario), detectar el punto muerto (asignación de recursos), aliviar el punto muerto: privar de recursos, cancelar el proceso

4. p>En Python, para admitir múltiples solicitudes para el mismo recurso en el mismo hilo, Python proporciona bloqueos reentrantes. Este RLock mantiene internamente un bloqueo y una variable de contador. El contador registra el número de adquisiciones, de modo que el recurso puede ser requerido varias veces. Hasta que se liberen todas las adquisiciones de un subproceso, otros subprocesos pueden obtener recursos. Los bloqueos recursivos se dividen en bloqueos recursivos y bloqueos no recursivos.

5. Bloqueo optimista

Suponga que no se producirán conflictos de concurrencia y solo verifique si se viola la integridad de los datos al enviar la operación.

6. Bloqueo pesimista

Suponiendo que se producirán conflictos de concurrencia, se bloquearán todas las operaciones que puedan violar la integridad de los datos.

Métodos de bloqueo comúnmente utilizados en Python: bloqueos de exclusión mutua, bloqueos reentrantes, bloqueos iterativos, bloqueos de llamadas mutuas y bloqueos de giro