2011-12-07 19 views

Respuesta

18

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).

+1

Hola, ¿puedes dar un ejemplo en el que una llamada de bloqueo no sea sincrónica? Gracias –

+0

@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

2

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.

+0

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

2

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

0

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.

Cuestiones relacionadas