multithreading - stop - threading current_thread()
¿Cuáles son las diferencias entre el bloqueo con síncrono, sin bloqueo y asíncrono? (4)
Esta pregunta ya tiene una respuesta aquí:
- Asíncrono vs no bloqueante 12 respuestas
Estoy leyendo ''Conceptos del sistema operativo con Java''. Estoy bastante confundido por el concepto de bloqueo y síncrono, ¿cuáles son las diferencias entre ellos?
Bloqueo: se dice que la operación tiene un comportamiento de bloqueo si espera a que se complete algún evento. Por ejemplo: si un bloqueo no está disponible, un subproceso puede entrar en un estado de espera en el evento hasta que el bloqueo esté disponible. Dicha operación se dice que está bloqueando.
Sincrónico: la llamada sincrónica se puede entender fácilmente con un ejemplo de protocolo http donde el cliente espera la respuesta del servidor y luego procede. La llamada síncrona puede estar bloqueando o no bloqueando.
Asíncrono: un método puede llamar asíncrono a otro método. Después de una llamada puede continuar ejecutando su siguiente instrucción. Cuando el método llamado finaliza su ejecución, enviará una respuesta / devolución de llamada al método de la persona que llama de su éxito o fracaso.
Sin bloqueo: el comportamiento de no bloqueo es como verificar la condición en esa instancia. Por ejemplo, en el caso de bloqueos, si no está disponible, no esperará hasta que esté disponible como una operación de bloqueo. También necesitamos verificar repetidamente la disponibilidad de bloqueos ya que no habrá devolución de llamada como las llamadas asíncronas.
Resumen: El bloqueo es siempre síncrono.
La llamada síncrona tiene operaciones de bloqueo si espera a que se complete algún evento, el método de la persona que llama puede entrar en estado de espera.
La llamada síncrona no se bloquea, si comprueba repetidamente que ocurra algún evento antes de continuar con la siguiente instrucción. El método de la persona que llama no ingresa el estado de espera en algún evento para completar.
La llamada asíncrona no puede estar bloqueando e implica una devolución de llamada del método llamado que debe manejarse.
El bloqueo puede o no ser lo mismo que síncrono, según el contexto. Cuando hablamos de llamadas a métodos, también se puede decir que una llamada sincrónica está bloqueando (volveré a esto en un momento), porque el hilo que llama al método no puede avanzar hasta que el método regrese. El antónimo en este caso sería asíncrono.
En la terminología de bloqueo, se dice que un bloqueo está bloqueando si el hilo que espera adquirirlo se pone en modo suspendido hasta que el bloqueo esté disponible (o hasta que transcurra un tiempo de espera). El antónimo en este caso es un bloqueo no bloqueante, lo que significa que el hilo se devuelve inmediatamente incluso si no puede adquirir el bloqueo. Esto se puede usar para implementar el llamado bloqueo giratorio, en el que se sigue encuestando el estado del bloqueo mientras se mantiene el hilo activo.
Dicho esto, puede extrapolar la diferencia entre los conceptos: síncrono generalmente significa una actividad que debe esperar una respuesta antes de que el hilo pueda avanzar. El bloqueo se refiere al hecho de que el subproceso se coloca en un estado de espera (generalmente significa que no se programará para su ejecución hasta que ocurra algún evento). Desde aquí puede concluir que una llamada síncrona puede implicar un comportamiento de bloqueo o no, según la implementación subyacente (es decir, también puede estar girando, lo que significa que está simulando un comportamiento síncrono con llamadas asíncronas).
Los clasificaría de la siguiente manera:
Bloqueo: el subproceso esperará en la acción hasta el éxito o el fracaso (resalte en "esperará", el fallo suele ser un tiempo de espera)
Sincrónico: el subproceso completará la acción, ya sea por éxito o por error, antes de llegar a cualquier línea después de ella (resalte al completar la acción)
Sin bloqueo: el subproceso no esperará para completar la acción, ejecuta la acción inmediatamente
Asíncrono: otro hilo (ya sea lógico o físico) completará la acción o le informará que está listo con una devolución de llamada, no esperará antes de ejecutar los siguientes comandos. Nota: desde aquí se origina el nombre asíncrono, ya que no puede estar seguro en qué orden se ejecutarán los comandos
síncrono significa que el trabajo se realiza en el subproceso que llama a la función y el método no regresa hasta que finaliza.
Los métodos asíncronos se devuelven inmediatamente porque otro subproceso realiza el trabajo y levanta una bandera o dispara un evento cuando se realiza el trabajo.
el bloqueo significa que el hilo que ejecuta un evento de bloqueo esperará hasta que el evento haya ocurrido. por ejemplo, intenta leer desde un socket y ninguno le envía un mensaje. la llamada de bloqueo no volverá hasta que el mensaje haya sido revivido desde el socket.
bien y sin bloqueo significa lo contrario a bloquear con implica que las llamadas sin bloqueo son asíncronas.