¿Un proceso con más subprocesos en Linux tendrá más tiempo de CPU que un proceso con un solo subproceso?¿Procesaría más hilos en Linux tener más tiempo de CPU que procesar con un hilo?
En Linux, los procesos y subprocesos se describen mediante una estructura de tareas, y scheduling is based on tasks. He encontrado también this:
Cuando se crea un nuevo proceso
do_fork()
, establece el campo contador de ambos actual (el padre) y los procesos de la siguiente forma p (el niño):current->counter >>= 1; p->counter = current->counter;
En en otras palabras, el número de tics que deja el padre se divide en dos mitades, una para el padre y otra para el hijo. Esto se hace para evitar que los usuarios obtengan una cantidad ilimitada de tiempo de CPU utilizando el siguiente método: el proceso principal crea un proceso secundario que ejecuta el mismo código y luego se auto mata; ajustando correctamente la tasa de creación, el proceso hijo siempre obtendría un nuevo quantum antes de que expire el quantum de su primario. Este truco de programación no funciona, ya que el kernel no recompensa a las horquillas. De manera similar, un usuario no puede acaparar una parte desleal del procesador iniciando muchos procesos en segundo plano en un shell o abriendo muchas ventanas en un escritorio gráfico. En términos más generales, un proceso no puede acaparar recursos (a menos que tenga privilegios para otorgarse una política en tiempo real) al bifurcar a varios descendientes.
En realidad no encontré eso en las fuentes del núcleo, pero tal vez es mi culpa, tal vez vi una versión incorrecta del kernel.
Pero, ¿qué pasará más tarde, cada thread participará en la programación como un proceso separado? ¿Un proceso con diez hilos tendrá diez veces más tics que un proceso con un hilo? ¿Qué hay de IO en este sentido?
¡Gracias por su respuesta detallada! ¿Corrige que cgroups también limita IO de grupos de tal manera? – van
Sí, aunque no estoy seguro del estado actual de los programadores de E/S compatibles con jerarquías complejas, consulte: http://lwn.net/Articles/427961/ – ninjalj
Intento verificar su afirmación sobre cpu cgroups por ID de sesión . Y como pude ver, no es cierto para mi portátil Ubuntu 12.04 http://pastebin.com/0Fjp2BQy. La situación en RedHat 6.3 es aún peor, todo el proceso en un cgroup "/". ¿Es distro específico? O lo que estoy haciendo mal? – van