Sincronización de Linux /diferencia asíncrona y bloqueo /no bloqueo

  
 

Los conceptos que se explicarán hoy son: la diferencia entre síncrono /asíncrono y bloqueo /no bloqueo. Estos dos conjuntos de conceptos a menudo son confusos porque involucran el procesamiento de IO y tienen algunas similitudes. Explique el concepto de sincronización y asíncrono. Estos dos conceptos están relacionados con el mecanismo de notificación del mensaje. Por ejemplo, si voy al banco para manejar el negocio, puedo elegir esperar en línea o tomar una pequeña nota con mi número y esperar hasta que se descargue. Cuando estaba en este número, el contador me dijo que era mi turno de pasar por el negocio. El primero (esperando en línea) está esperando sincrónicamente los mensajes, mientras que el último (esperando que otros notifiquen) está esperando asincrónicamente los mensajes. En el procesamiento asincrónico de mensajes, esperando mensajes (En este caso, la persona que espera el negocio) a menudo registra un mecanismo de devolución de llamada que se activa mediante un mecanismo de activación (en este caso, la persona contraria) cuando se activa el evento de espera (aquí escrito en una pequeña nota) El número en la) encuentra a la persona que espera el evento. En el programa real, el procesamiento síncrono de mensajes es como una simple operación de lectura /escritura, deben esperar a que las dos operaciones se realicen antes de regresar, y el mecanismo de procesamiento asíncrono Es una operación IO multiplexada como selección /sondeo. Cuando se activa el mensaje de interés, el mecanismo de activación del mensaje notifica el inicio del procesamiento del mensaje. En segundo lugar, explica los conceptos y procedimientos de bloqueo y no bloqueo. Esperando el estado del mensaje (sin importar si es síncrono o asíncrono). Continúe con el ejemplo anterior, ya sea haciendo cola o usando el número para esperar la notificación. Si durante este proceso de espera, el camarero no puede hacer nada más que esperar el mensaje, entonces El mecanismo está bloqueado, lo que se manifiesta en el programa, es decir, el programa está bloqueado en la llamada a la función y no puede continuar ejecutándose. Por el contrario, a algunas personas les gusta llamar y enviar mensajes de texto mientras esperan que el banco maneje estos servicios. Este estado es de no bloqueo porque él (el camarero) no está bloqueando la notificación de este mensaje, sino que espera mientras hace lo suyo. Pero es importante tener en cuenta que el primer tipo de bloqueo sincrónico en realidad es ineficaz. Imagina que mientras estás en el teléfono, aún necesitas mirar hacia arriba y ver que la línea de fondo depende de ti. Si llamas y miras la línea, Al observar las dos operaciones del programa, este programa necesita alternar entre estos dos comportamientos diferentes, se puede imaginar que la eficiencia es baja, mientras que la última, la forma asincrónica sin bloqueo no tiene tal problema, porque Llamar es lo suyo (el camarero) y notificarle el contador (mecanismo de activación de mensajes), el programa no cambia entre dos operaciones diferentes. Muchas personas confundirán la sincronización y el bloqueo, creo que porque En muchos casos, la operación de sincronización se expresará en forma de bloqueo. Por ejemplo, muchas personas escribirán operaciones de lectura /escritura de bloqueo, pero no se olvide de establecer el indicador O_NONBLOCK en fd, para que la operación de sincronización se pueda realizar sin bloqueo; Muchas personas también confundirán las funciones asíncronas y no bloqueantes, ya que las operaciones asíncronas generalmente no se bloquean en la operación real de E /S. Por ejemplo, si usa la función de selección, la lectura no se bloqueará cuando la selección resulte legible. Es como cuando su número aparece en la lista, por lo general no hay nadie antes que usted, por lo que no será bloqueado cuando vaya al mostrador. Visible, síncrono /asíncrono y bloqueo /no bloqueo son dos conjuntos diferentes. Pueden coexistir y combinar, también puede ver aquí: http://www.ibm.com/developerworks/cn/linux/l-async/Después de escribir este artículo anoche, vine a ver los comentarios esta mañana y al mismo tiempo Después de leerlo varias veces, encontré que todavía hay algunos lugares donde la explicación no es lo suficientemente clara. Continuaré complementando mi declaración aquí. Espero no estar más confundida. Sincrónica y asíncrona: Como se mencionó anteriormente, la sincronización y la asincronía son solo una preocupación. El mecanismo de cómo se notifica el mensaje, no el mecanismo para procesar el mensaje. Es decir, en el caso de la sincronización, el propietario del mensaje procesa el mensaje para esperar a que se active el mensaje, y en el caso de asíncrono, el mecanismo de activación se utiliza para notificar al manejador de mensajes. Por lo tanto, en el mecanismo asíncrono, se necesita un puente de enlace entre el manejador de mensajes y el mecanismo de activación. En nuestro ejemplo, el puente es el número sobre la nota pequeña, y el mecanismo de multiplexación IO, como seleccionar /sondear En el medio está fd, cuando se activa el mensaje, el mecanismo de activación encuentra la función de procesamiento que maneja de fd a fd. Preste atención a la comprensión de los dos conceptos de notificación de mensaje y mensaje de procesamiento, que es la clave para comprender este problema. Por ejemplo, es su turno de manejar el negocio. Este es el mensaje que le interesa e ir al negocio es el procesamiento de este mensaje. Hay una diferencia entre los dos. En la operación de IO real, el mensaje de preocupación es si el fd es legible. Escribir, y el procesamiento del mensaje es leer y escribir este fd. Sincrónico /asíncrono solo presta atención a cómo notificar el mensaje, no les importa cómo tratar el mensaje, por ejemplo, el banco solo le informa que es su turno de manejar el negocio. Y cómo manejar el negocio que desconocen. Y mucha gente confunde la sincronización y el bloqueo, creo que porque no distingue entre estos dos conceptos, como el bloqueo de las operaciones de lectura /escritura, de hecho, el mensaje se notifica y procesa. Combinado, el mensaje de interés aquí es si fd es legible /grabable, y el procesamiento de mensajes es de lectura /escritura en fd. Cuando configuramos este fd en no bloqueante, la operación de lectura /escritura no estará en En espera de que el mensaje notifique que está bloqueado. Si fd no se puede leer /escribir, la operación volverá de inmediato. Muchas personas preguntarán, la operación asincrónica no se bloqueará. ¿Se ha notificado que hay un mensaje que se puede procesar y no se debe bloquear? Las operaciones asíncronas reales se pueden bloquear, pero generalmente no se bloquean al procesar mensajes, pero se bloquean cuando se espera que se activen los mensajes. Por ejemplo, seleccione la función, si el último parámetro de tiempo de espera pasado es NULL, entonces si está preocupado Ninguno de los eventos se activa, el programa siempre se bloqueará en la llamada de selección. Si utiliza el bloqueo no asíncrono, como la operación de grupo aio_ *, cuando inicio una operación aio_read, la función regresará inmediatamente sin bloquear. Cuando se active el evento de interés, se llamará a la función de devolución de llamada previamente registrada para su procesamiento. Para obtener más información, consulte el artículo que aparece en la conexión anterior. Regrese al ejemplo anterior, si la persona que está esperando el negocio en el banco está utilizando Una forma asincrónica de esperar a que se active el mensaje, es decir, obtener una pequeña nota, si no puede dejar que el banco haga otras cosas durante este tiempo, entonces obviamente esta persona está bloqueada en la operación de espera; Sin embargo, esta persona repentinamente se encontró culpable de adicción al cigarrillo y tenía que salir a fumar cigarrillos, por lo que le dijo al gerente del vestíbulo que era problemático cuando se trataba de mi número. Notificarme de (registrar una función de devolución de llamada), entonces no está bloqueado a la espera de esta operación anterior, esta es la forma natural de no bloqueo asíncrono +.

Copyright © Conocimiento de Windows All Rights Reserved