Glosario/CPU, GPU y energía

Subprocesos

También: threads, número de subprocesos

Respuesta rápida

Un subproceso (thread) es una línea de ejecución independiente dentro de un proceso, y un proceso puede ejecutar varios subprocesos a la vez en distintos núcleos de la CPU. La columna “Subprocesos” de Monitor de Actividad muestra cuántos tiene cada proceso en este momento.

La mayoría de las apps usan muchos subprocesos: uno para dibujar la interfaz y atender los clics, y otros para las solicitudes de red, el acceso a archivos y el trabajo en segundo plano. Que una app grande tenga decenas de subprocesos es normal.

El número de subprocesos dice poco sobre cuánto trabaja una app. La mayoría de los subprocesos pasan el tiempo esperando. El % CPU mide mejor el trabajo real.

Dónde ver el número de subprocesos

En Monitor de Actividad, haz clic en la pestaña CPU. La columna “Subprocesos” muestra el número de cada proceso, y la parte inferior de la ventana muestra el total de subprocesos y procesos del Mac.

En Terminal, ps -M -p <PID> lista los subprocesos de un solo proceso.

Cuándo importa que crezca el número de subprocesos

Un número de subprocesos que no deja de subir durante horas, sin estabilizarse, puede indicar un error por el que una app crea subprocesos y nunca los termina. Si esa app además crece en memoria o se ralentiza, reiniciarla es un primer paso razonable, y avisar al desarrollador ayuda.

Por qué algunas apps tienen cientos de subprocesos

macOS da a las apps un conjunto compartido de subprocesos de trabajo a través de Grand Central Dispatch. Cuando una app reparte muchas tareas pequeñas, como decodificar imágenes o leer archivos, el conjunto puede crecer para atenderlas y luego volver a encogerse. Solo con eso, una app ocupada puede sumar decenas de subprocesos.

Los navegadores, las apps de chat y los editores de código suelen ejecutar varios procesos, cada uno con sus propios subprocesos para dibujar, la red, el audio y los scripts. Las apps de audio y vídeo tienen subprocesos preparados para que la reproducción nunca tenga que esperar. Si lo sumas todo, que una app grande tenga unos cientos de subprocesos no es raro.

kernel_task suele mostrar el número más alto de todos. Contiene los subprocesos que usan el kernel de macOS y sus controladores, y no es señal de ningún problema.

Cómo ver el número de subprocesos de una app

  1. En Monitor de Actividad, selecciona el proceso y haz doble clic en él, o haz clic en el botón Información de la barra de herramientas.
  2. La ventana del inspector muestra “Subprocesos” junto con “Puertos” y “Cambios de contexto” de ese proceso.
  3. En Terminal, ejecuta top -l 1 -pid <PID> -stats pid,command,th, cambiando <PID> por el ID del proceso de la columna “PID”. El valor #TH muestra el total de subprocesos y, después de la barra, los que están en ejecución.
  4. Para ordenar todos los procesos por número de subprocesos, ejecuta top -o th -stats pid,command,th y pulsa q para salir.

Número de subprocesos normal y preocupante

El total importa menos que hacia dónde se mueve con el tiempo.

  • Normal: el número salta cuando abres ventanas, empiezas una descarga o inicias una exportación, y vuelve a bajar cuando termina el trabajo.
  • Normal: un número alto y estable, que se mantiene más o menos igual durante horas.
  • Preocupante: un número que sube todo el día y nunca baja, incluso con la app inactiva.
  • Preocupante: un número de subprocesos que sube junto con la memoria o con el número de puertos. Esa combinación suele apuntar a una fuga en la app.
  • Preocupante: muchos subprocesos en ejecución, los que aparecen después de la barra en top, en una app que no estás usando. Está haciendo un trabajo que no le has pedido.

Subprocesos y núcleos de la CPU

Tener más subprocesos que núcleos es normal. macOS cambia los núcleos de un subproceso a otro muchas veces por segundo, y la mayoría de los subprocesos están esperando de todos modos. Solo los que se están ejecutando compiten por un núcleo.

El número de subprocesos que pueden ejecutarse en el mismo instante es igual a tu número de núcleos lógicos, que te da sysctl -n hw.logicalcpu. Si hay más subprocesos listos, los que sobran esperan, y esa espera es lo que sube la carga media.

Preguntas frecuentes

¿Qué significa “Subprocesos” en Monitor de Actividad?

Es el número de subprocesos que ejecuta un proceso. Los subprocesos permiten que una app haga varias cosas a la vez, como dibujar su ventana mientras descarga un archivo.

¿Es malo tener muchos subprocesos?

Normalmente no. Las apps grandes suelen tener decenas o cientos de subprocesos, y la mayoría están inactivos. Lo que hay que vigilar es un número que crece sin parar.

¿Qué relación hay entre los subprocesos y un % CPU por encima de 100?

Un proceso solo puede usar más de un núcleo si tiene más de un subproceso trabajando a la vez. Así es como el % CPU pasa del 100 %.

¿Cuántos subprocesos puede ejecutar un Mac a la vez?

Uno por núcleo lógico en el mismo instante. Ejecuta sysctl -n hw.logicalcpu para ver el número. Pueden existir miles más, pero se turnan.

¿Salir de una app libera sus subprocesos?

Sí. Cuando un proceso termina, todos sus subprocesos terminan con él. Reiniciar una app es la forma más rápida de poner a cero un número de subprocesos que ha crecido demasiado.

¿Por qué kernel_task tiene tantos subprocesos?

kernel_task es el kernel de macOS, y sus subprocesos incluyen los que usan el kernel y sus controladores. Que tenga un número alto es normal.

Relacionado

¿Buscas algo mejor que Monitor de Actividad? Consulta las mejores alternativas a Monitor de Actividad para Mac, o explora todos los términos del glosario.