Estoy leyendo 'Operation System Concepts With Java'. Estoy bastante confundido por el concepto de de bloqueo y sincrónico, ¿cuáles son las diferencias entre ellos?¿Cuál es la diferencia entre el bloqueo con síncrono, sin bloqueo y asíncrono?
Respuesta
El bloqueo puede ser o no el mismo que el sincrónico, dependiendo del contexto. Cuando hablamos de llamadas a métodos, también se puede decir que una llamada síncrona es de bloqueo (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 asincrónico.
En la terminología de bloqueo, se dice que un bloqueo se bloquea si el hilo que está esperando para 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 vuelve inmediatamente aunque no pueda adquirir el bloqueo. Esto se puede usar para implementar el llamado bloqueo giratorio, donde se continúa sondeando el estado del bloqueo mientras se mantiene el hilo activo.
Habiendo dicho esto, puede extrapolar la diferencia entre los conceptos: sincrónico 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 hilo se coloca en estado de espera (generalmente significa que no se programará 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, dependiendo de 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).
Hola, ¿puedes dar un ejemplo en el que una llamada de bloqueo no sea sincrónica? Gracias –
@Always_Beginner: Una llamada de bloqueo siempre será sincrónica porque implica que el flujo de control se bloquea mientras se espera que se complete algo. Sin embargo, una llamada sincrónica puede no estar bloqueando. – Tudor
sincrónico significa que el trabajo se realiza en la secuencia que llama a la función y el método no se devuelve hasta que finaliza.
métodos asíncronos regresan inmediatamente porque otro hilo hace el trabajo y levanta un indicador o dispara un evento cuando el trabajo está hecho.
bloqueo significa que la hebra que ejecuta un evento de bloqueo esperará hasta que se haya producido el evento. por ejemplo, intenta leer desde un socket y ninguno le envía un mensaje. la llamada de bloqueo no regresará hasta que el mensaje haya sido restablecido desde el socket.
bien y sin bloqueo significa que lo contrario a bloquear implica que las llamadas no bloqueadas son asincrónicas.
thx kronos . parece que el bloqueo síncrono y no tiene diferencias, ambos necesitan esperar un trabajo o evento hecho, luego pueden continuar haciendo el próximo trabajo o evento. ¿Está bien? – diligent
Me clasificarlos de la siguiente manera:
bloqueo - Tema esperará en la acción éxito hasta el o fracaso (resaltado en 'va a esperar', el fracaso es comúnmente un tiempo de espera)
síncrono - Tema completará el acción, ya sea por el éxito o fracaso, antes de llegar a cualquier línea después de que (resalte al finalizar la acción)
sin bloqueo - Tema no va a esperar a completar la acción, ejecuta una acción inmediata
Asynchr onous: otro hilo (ya sea lógico o físico) completará la acción o informará que está listo usando una devolución de llamada, no esperará antes de ejecutar los siguientes comandos. Nota: a partir de aquí se origina el nombre asíncrono, ya que no puede estar seguro de en qué orden se ejecutarán los comandos
Se dice que el bloqueo tiene un comportamiento de bloqueo si espera que algún evento se complete. Por ejemplo: si un bloqueo no está disponible, un hilo puede ingresar en un estado de espera en el evento hasta que el bloqueo esté disponible. Tal operación se dice que es bloqueante.
Sincrónico: la llamada síncrona se puede entender fácilmente con un ejemplo de protocolo http donde el cliente espera la respuesta del servidor y luego continúa. La llamada síncrona puede ser de bloqueo o no bloqueo.
Asincrónico: un método puede llamar asincrónicamente a otro método. Después de una llamada, puede continuar ejecutando su siguiente instrucción. Cuando el método called complete su ejecución, enviará una respuesta/devolución de llamada al método de llamada de su éxito o error.
Sin bloqueo: el comportamiento no bloqueante es como comprobar la condición en esa instancia. Por ejemplo, en el caso de bloqueos, si no está disponible, no esperará hasta que esté disponible como operación de bloqueo. También necesitamos verificar repetidamente la disponibilidad de los bloqueos, ya que no habrá devolución de llamada, como las llamadas asincrónicas.
Resumen: El bloqueo es siempre sincrónico.
Llamada síncrona tiene operaciones de bloqueo si espera que algún evento se complete, el método del llamante puede entrar en estado de espera.
La llamada síncrona no bloquea, si se comprueba repetidamente que ocurra algún evento antes de continuar con la siguiente instrucción. El método de llamada entra en estado de espera en algún evento para completar.
La llamada asincrónica no puede ser un bloqueo y se trata de una devolución de llamada del método llamado que debe controlarse.
- 1. Diferencia entre bloqueo (taquilla) y bloqueo (variable_which_I_am_uso)
- 2. ¿Cuál es la diferencia entre bloqueo y Mutex?
- 3. Diferencia entre monitor y bloqueo?
- 4. ¿Cuál es la diferencia entre un bloqueo exclusivo y un bloqueo compartido?
- 5. Registro remoto asíncrono sin bloqueo en Java?
- 6. ¿Thrust es síncrono o asíncrono?
- 7. Bloqueo sin bloqueo
- 8. ¿Diferencia entre el bloqueo sincronizado y el reentrante?
- 9. Diferencia entre el bloqueo (esto) y un bloqueo en el objeto estático
- 10. Diferencia entre bloque y bloqueo en Ruby
- 11. ¿Cuál es la diferencia entre sincronizado en lockObject y usando esto como el bloqueo?
- 12. ¿Javamail es asíncrono o síncrono?
- 13. ¿Qué es un servidor web de bloqueo y de no bloqueo? ¿Qué diferencia hay entre ambos?
- 14. ¿Hay alguna diferencia entre el "bloqueo" de Java y el "bloqueo" de C#?
- 15. ¿Envolviendo llamadas asincrónicas en un hilo de bloqueo síncrono?
- 16. ¿Cuál es la diferencia entre getResourceAsStream con y sin getClassLoader?
- 17. Postback asíncrono y síncrono en ASP.NET
- 18. Tubos con nombre sin bloqueo
- 19. zócalo Java sin bloqueo
- 20. ¿Cuál es la diferencia de Evento y bloqueo en el módulo de subprocesamiento de python?
- 21. Descarga de javascript sin bloqueo
- 22. ¿Colección concurrente sin bloqueo?
- 23. ¿Cuál es la diferencia entre LinkedBlockingQueue y ConcurrentLinkedQueue?
- 24. Javascript sin bloqueo
- 25. Obsesión con secuencias de comandos sin bloqueo
- 26. getch sin bloqueo(), ncurses
- 27. mpi: bloqueo vs no bloqueo
- 28. Diferencia entre el patrón del proactor y el modelo síncrono en el servidor web
- 29. Sin bloqueo pthread_join
- 30. ¿Cómo escribo un método síncrono de bloqueo en Javascript?
Por favor, consulte este blog http://voinici.ceata.org/~sana/blog/?p=248 y http://stackoverflow.com/questions/2625493/asynchronous-vs-non-blocking –