2 votos

Cómo macOS detecta las aplicaciones que ha dejado de responder?

A veces, las aplicaciones dejan de responder a eventos de usuario, probablemente debido a errores o inesperado de casos de borde. Pero es diferente de un accidente a causa de una aplicación puede dejar de responder durante un tiempo y luego "responder" de nuevo, por ejemplo Photoshop puede atascarse al abrir imágenes enormes porque el proceso puede tardar algún tiempo, pero finalmente se carga la imagen y sigue funcionando bien.

Not responding

Y me pregunto, en el nivel técnico, cómo el sistema operativo detecta este tipo de casos para ofrecer al usuario una opción para forzar el cierre de la aplicación.

3voto

Jose Chavez Puntos 645

Los programas de la GUI en macOS (y la mayoría de las gráficas de los sistemas operativos) trabajo por tener un bucle principal que se vacía de lo que se denomina "cola de mensajes". Algunas veces esto se llama un "mensaje de la bomba".

Los mensajes se colocan en la cola de mensajes por el sistema operativo de ventanas de subsistema de decirle a la aplicación acerca de las cosas que ocurrió - por ejemplo, "el ratón se hace clic en (x,y)" o "la ventana se cambia el tamaño a tamaño (anchura,altura)".

La aplicación, a continuación, tira de estos mensajes de la cola, los procesa, y luego espera para los nuevos mensajes destacados.

Si la aplicación por alguna razón no está tirando de estos mensajes de la cola por un período de tiempo, macOS decir que la aplicación no responde. Esto es todo lo que es.

Muchos GUI de la aplicación de dividir su ejecución en varios "hilos" - que puede ser pensado como un programa de flujos de ejecución al mismo tiempo. El hilo principal es el responsable de la principal bucle de mensajes, mientras que otros hilos pueden ser responsables de comunicación de la red, e/S de disco, antecedentes de cálculos, etc. Sin embargo cualquier cambio en las interfaces gráficas de usuario, que es administrado por el sistema operativo debe de pasar por el hilo principal.

Si por alguna razón el hilo principal está ocupado haciendo otra cosa que la GUI de trabajo, entonces se puede estar marcado como no respondedores. Esto podría ser debido a que el programa está atascado en un bucle infinito, o está en un punto muerto a la espera de algún recurso o similar. El programa nunca se recuperará de este estado, pero el sistema operativo no puede saber esto.

Otra razón por la que el hilo principal para ser ocupado podría ser que se está guardando un archivo de gran tamaño, a la espera de la comunicación en la red, o haciendo un gran cálculo. Después de eso, el programa va a empezar a tirar de los mensajes de la cola de nuevo, y será a responder de nuevo. Normalmente los programadores de hacer un montón de trabajo para asegurarse de que nada de eso sucede en el hilo principal para asegurar que el programa es sensible en todo momento.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X