En programación, ¿qué se entiende por una llamada de bloqueo?

Piense en los tipos de programas que uno escribiría en las clases de programación introductoria. Escribe un montón de líneas de código, y cuando el programa se compila y / o ejecuta, cada línea de código que escribió se ejecuta de acuerdo con el orden en que las escribió. Digamos que tiene las siguientes líneas de código:

int bar;
cin >> bar;
int baz = 3;

En este código C ++, el valor de baz no se establecerá hasta que el usuario ingrese un valor en la consola, como se especifica en la línea 2. Este es un ejemplo de bloqueo de E / S. El programa no continuará la ejecución hasta que se reciba la entrada del usuario. Una llamada de bloqueo es solo una llamada a cualquier tipo de funcionalidad que causa una detención similar de la ejecución, lo que significa una llamada a la función en la que la persona que llama no reanudará la ejecución hasta que la función llamada haya terminado de ejecutarse.

Lea un poco en programas y llamadas síncronos versus asíncronos.

En la programación hay un escenario llamado “un usuario a la vez”.

En ese caso, el fragmento de código que llama a una función se “bloquea” hasta que se completa otro fragmento de código que ya está funcionando en esa función.

Por ejemplo., Si el subproceso A está usando updateMethod () para el cual el subproceso B está solicitando ahora, entonces el subproceso B se suspende / bloquea hasta que el subproceso A finaliza su tarea con updateMethod ().

Como el hilo B “call” to updateMethod () está “bloqueado” por algún tiempo, este mecanismo se llama como “call de bloqueo”

Una llamada de bloqueo es la que devuelve solo :

  1. cuando la tarea asignada se completa o
  2. es seguro que la tarea no se puede realizar o ha fallado

Para generalizar aún más el concepto, decimos que una llamada de bloqueo definida de esta manera tiene un Tiempo de espera infinito, es decir, la llamada devolverá SI y SOLO SI se cumple alguna de las condiciones en 1 o 2, y hasta entonces la persona que llama tendrá que esperar y el el hilo actual será bloqueado.

Más comúnmente, en muchos casos, incluso para las llamadas “llamadas de bloqueo”, no queremos que las llamadas sigan esperando indefinidamente, por lo que damos un valor de Tiempo de espera en algunas unidades de tiempo, por ejemplo, milisegundos. Este tiempo de espera significa que si se ha alcanzado la condición 1 o 2 anterior dentro de ese umbral de tiempo de espera, el comportamiento será exactamente como se describe hasta ahora.

Por otro lado, si ni la condición 1 ni la 2 han sucedido y el valor del tiempo de espera ha expirado, ahora la llamada de bloqueo regresará con un código de error de haber alcanzado el tiempo de espera. Sobre la base de este código de error, la función de llamada puede manejar el error en consecuencia.

Una llamada de bloqueo es aquella que no regresará hasta que se complete la acción que realiza. Una llamada sin bloqueo regresa tan pronto como, en cierto sentido, haya dado las órdenes para que la acción tenga lugar.

Una llamada de bloqueo se dirige a la pizzería, ordena una pizza, espera hasta que se cocine y luego se la lleva a casa. Una llamada sin bloqueo está llamando para pedir pizza para la entrega; la llamada se completa antes de que llegue la pizza.

Generalmente es una llamada al sistema operativo que requerirá un dispositivo de entrada / salida lento para acceder. En la práctica, eso significa casi cualquier dispositivo de E / S. Un disco duro puede tardar “solo” 10 ms en responder, pero un procesador que funciona a 4 GHz puede realizar una gran cantidad de trabajo en ese momento. Por lo tanto, el programa que realizó la llamada se pone en una cola “bloqueada”, y no se quita hasta que el dispositivo de E / S haya terminado de hacer sus cosas. Mientras tanto, el sistema operativo puede ejecutar otros programas, no bloqueados.