Red de conocimiento informático - Problemas con los teléfonos móviles - La diferencia entre el modo de bloqueo de socket y el modo sin bloqueo

La diferencia entre el modo de bloqueo de socket y el modo sin bloqueo

Bloqueo

Una llamada de bloqueo significa que el hilo actual se cuelga hasta que regresa el resultado de la llamada. La función solo regresa después de obtener el resultado. Algunas personas pueden equiparar el bloqueo de llamadas con las llamadas sincrónicas, pero en realidad son diferentes. Para llamadas sincrónicas, muchas veces el hilo actual todavía está activo, pero lógicamente la función actual no regresará. Por ejemplo, cuando llamamos a la función Recibir en CSocket, si no hay datos en el búfer, la función esperará hasta que haya datos antes de regresar. En este punto, el hilo actual continuará procesando varios mensajes. Si la ventana principal y la función de llamada están en el mismo hilo, la interfaz principal aún debe actualizarse a menos que se llame en una función de operación de interfaz especial. Otra función que recibe datos en un socket, recv, es un ejemplo de llamada de bloqueo. Cuando el socket está en modo de bloqueo, si se llama a esta función sin datos, el hilo actual se bloquea hasta que haya datos disponibles.

Sin bloqueo

El no bloqueo corresponde al concepto de bloqueo, lo que significa que la función no bloquea el hilo actual hasta que el resultado no esté disponible de inmediato, sino que regresa inmediatamente.

Objetos en modo de bloqueo y llamadas a funciones de bloqueo

Existe una fuerte correlación entre si el objeto está en modo de bloqueo y si la función es una llamada de bloqueo, pero no son lo mismo . Una correspondencia. Puede haber llamadas sin bloqueo en objetos bloqueados, y podemos evitar el bloqueo sondeando el estado a través de ciertas API y llamando a funciones de bloqueo en el momento apropiado. Para objetos que no son de bloqueo, la llamada a funciones especiales también puede ingresar llamadas de bloqueo. La función de selección es un ejemplo de ello.