¿Cómo macOS detecta aplicaciones que dejaron de responder?


2

A veces, las aplicaciones dejan de responder a los eventos de los usuarios, probablemente debido a errores o casos inesperados. Pero es diferente de un fallo porque una aplicación puede dejar de responder por un tiempo y luego "comenzar a responder" de nuevo, por ejemplo, Photoshop puede atascarse al abrir imágenes grandes porque el procesamiento puede tomar algo de tiempo, pero finalmente carga la imagen y continúa funcionando bien .

Not responding

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

Respuestas:


3

Los programas GUI en macOS (y en la mayoría de los otros sistemas operativos gráficos) funcionan teniendo un bucle principal que vacía una llamada "cola de mensajes". Algunas veces esto se llama "bomba de mensajes".

El subsistema de ventanas del sistema operativo coloca los mensajes en la cola de mensajes para informar a la aplicación sobre las cosas que sucedieron, por ejemplo, "se hizo clic con el mouse en (x, y)" o "la ventana se redimensionó al tamaño (ancho, alto)" .

La aplicación luego extrae estos mensajes de la cola, los procesa y luego espera nuevos mensajes.

Si, por algún motivo, la aplicación no extrae estos mensajes de la cola durante un período de tiempo, macOS dirá que la aplicación no responde. Esto es todo lo que es.

Muchas aplicaciones GUI dividen su ejecución en múltiples "subprocesos", que se pueden considerar como un programa que se ejecuta al mismo tiempo. El hilo principal es responsable del bucle principal del mensaje, mientras que otros hilos pueden ser responsables de la comunicación de la red, la E / S del disco, los cálculos en segundo plano, etc. Hilo principal.

Si, por algún motivo, el subproceso principal está ocupado haciendo otra cosa que no sea el trabajo de la GUI, podría marcarse como que no responde. Esto podría deberse a que el programa está atascado en un bucle infinito, o está en un punto muerto en espera de algún recurso o similar. El programa nunca se recuperará de este estado, pero el sistema operativo no puede saberlo.

Otra razón por la que el subproceso principal está ocupado puede ser que esté guardando un archivo grande, esperando la comunicación en la red o haciendo un cálculo grande. Una vez hecho esto, el programa volverá a sacar mensajes de la cola y responderá nuevamente. Por lo general, los programadores hacen mucho trabajo para garantizar que nada de eso ocurra en el hilo principal para garantizar que el programa responda en todo momento.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.