Como usted mismo ha dicho, puede presionar Hpara mostrar hilos de usuario.
Solo para referencia futura (y por diversión), ¡calculemos la utilización de la CPU!
Un poco de historia:
En un sistema operativo moderno, hay un Programador. Su objetivo es garantizar que todos los procesos y sus hilos obtengan una parte justa del tiempo de computación. No entraré demasiado en la programación (es realmente complicado). Pero al final hay algo llamado una cola de ejecución . Aquí es donde todas las instrucciones de todos los procesos se alinean para esperar a que se ejecute su turno.
Cualquier proceso pone sus "tareas" en la cola de ejecución, y una vez que el procesador está listo, las saca y las ejecuta. Cuando un programa se va a dormir, por ejemplo, se elimina de la cola de ejecución y regresa al "final de la línea" una vez que está listo para ejecutarse nuevamente.
La clasificación en esta cola tiene que ver con la prioridad de los procesos (también llamada "buen valor", es decir, un proceso es bueno con los recursos del sistema).
La longitud de la cola determina la carga del sistema. Una carga de 2.5, por ejemplo, significa que hay 2.5 instrucciones para cada instrucción que la CPU puede manejar en tiempo real .
En Linux, por cierto, esta carga se calcula en intervalos de 10 ms (por defecto).
Ahora en los valores de porcentaje de utilización de la CPU:
Imagine que tiene dos relojes, uno se llama t
y representa el tiempo real . Mide un segundo por cada segundo. El otro reloj que llamamos c
. Solo se ejecuta si hay procesamiento que hacer. Eso significa que solo cuando un proceso calcula algo funciona el reloj. Esto también se llama tiempo de CPU. Todos y cada uno de los procesos en el sistema 'tienen' uno de esos.
La utilización del procesador ahora se puede calcular para un solo proceso:
o para todos los procesos:
En una máquina multinúcleo, esto puede resultar en un valor de 3.9, por supuesto, porque la CPU puede calcular cuatro segundos de cálculo por segundo, si se utiliza perfectamente.
Wikipedia proporciona este ejemplo:
Una aplicación de software que se ejecuta en una máquina UNIX de 6 CPU crea tres procesos UNIX para cumplir con los requisitos del usuario. Cada uno de estos tres procesos crea dos hilos. El trabajo de la aplicación de software se distribuye uniformemente en 6 hilos de ejecución independientes creados para la aplicación. Si no hay que esperar por los recursos, se espera que el tiempo total de la CPU sea seis veces en tiempo real transcurrido.
Aquí hay un pequeño fragmento de Python que hace esto
>>> import time
>>> t = time.time()
>>> c = time.clock()
>>> # the next line will take a while to compute
>>> tuple(tuple(i**0.2 for i in range(600)) for i in range(6000))
>>> print (time.clock() / (time.time() - t)) * 100, "%"
66.9384021612 %
En un mundo perfecto, se podría inferir de esto que la carga del sistema es 100 - 66.93 = 33,1%. (Pero en realidad eso estaría mal debido a cosas complejas como la espera de E / S, ineficiencias de programación, etc.)
A diferencia de la carga , estos cálculos siempre darán como resultado un valor entre 0 y el número de procesadores, es decir, entre 0 y 1 o 0 a 100%. Ahora no hay forma de diferenciar entre una máquina que ejecuta tres tareas, que utilizan 100% de CPU, y una máquina que ejecuta un millón de tareas, y apenas realiza trabajo en una sola de ellas, también al 100%. Si, por ejemplo, está tratando de equilibrar un montón de procesos en muchas computadoras, la utilización de la CPU es casi inútil. Cargar es lo que quieres allí.
Ahora, en realidad, hay más de uno de esos relojes de tiempo de procesamiento. Hay uno para esperar en E / S, por ejemplo. Por lo tanto, también podría calcular la utilización de recursos de E / S.
Puede que esto no haya sido útil con respecto a la pregunta original, pero espero que sea interesante. :)