2010-10-23 14 views
5

Tengo una pregunta sobre la implementación de pthread en Linux.cómo se ven pthreads en linux por el programador

Supongamos que un proceso tiene 5 hilos. Ahora, ¿cómo ve el programador estos hilos (o no los ve en absoluto)? p. Cuando se invoca el planificador, solo programa el proceso principal, y luego es la responsabilidad del proceso principal programar entre cada uno de sus hilos.

O a la inversa, ese planificador programa cada hilo como si fuera un proceso separado.

Respuesta

7

Para Linux moderno (implementación pthread NPTL), el programador programa subprocesos, un subproceso se considera un "proceso de peso ligero". pthread_create se implementa en términos de la llamada al sistema clone.

+0

En ese caso, el proceso que creó los hilos debe cambiar de contexto. ¿Es tan? –

+0

@Ganesh no necesariamente. El nuevo hilo podría ejecutarse en un núcleo diferente. Pero sí, en un núcleo dado al cambiar de un hilo a otro, ya sea en el mismo proceso o no, se produce un cambio de contexto. Cambiar a un subproceso en el mismo proceso puede ser más barato que cambiar a un subproceso en otro proceso, ya que es posible que no necesite invalidar la tabla de página, etc. –

2

Linux programa cada hilo como si fuera un Proceso con alcance como PTHREAD_SCOPE_SYSTEM. La implementación nptl puede utilizar múltiples CPU.

1

Como dijo Logan, cada hilo está programado de forma independiente.

Sin embargo, si lo desea, puede usar grupos de control de procesos de Linux para programar grupos de hilos en su lugar.

Los grupos de control de proceso hacen que la programación sea un poco más ineficiente, pero puede ser mucho más justo.

Un uso que se ha vuelto muy popular es poner todos los procesos y subprocesos creados por cada TTY en un grupo de control por TTY. Esto da como resultado que todas las aplicaciones gráficas de un usuario se programen al mismo nivel que su compilación de kernel de 24 hilos que lanzó en una ventana de terminal. Las aplicaciones gráficas obtienen 50% y la compilación obtiene 50%. Si abre otra ventana de terminal y comienza a compilar glibc con otros 24 hilos, cambia a 33% de aplicaciones de escritorio, 33% de compilación de kernel y 33% de compilación glibc.

Cuestiones relacionadas