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

2

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

Y me pregunto, a 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.

    
pregunta njuri 15.03.2018 - 10:37

1 respuesta

3

Los programas GUI en macOS (y la mayoría de los otros sistemas operativos gráficos) funcionan al tener 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 en el mouse en (x, y)" o "la ventana se redimensionó a tamaño (ancho, altura)".

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. Sin embargo, cualquier cambio en las interfaces gráficas de usuario que administra el sistema operativo debe pasar por el 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 hilo principal está ocupado es 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.

    
respondido por el jksoegaard 15.03.2018 - 18:20

Lea otras preguntas en las etiquetas