linux - musica - Diferencia entre PID y TID
id3 musica (4)
En realidad, cada hilo en un proceso de Linux es Light Weight Process (LWP). Entonces, la gente puede llamar al hilo como un proceso ... Pero seguramente hay una diferencia. Cada hilo en un proceso tiene un ID de hilo diferente (TID) y comparte el mismo ID de proceso (PID).
Si está trabajando con las funciones de la biblioteca pthread, estas funciones no utilizan estos TID porque se trata de ID de subprocesos de nivel de kernel / OS.
¿Cuál es la diferencia entre PID y TID?
La respuesta estándar sería que PID es para procesos, mientras que TID es para subprocesos. Sin embargo, he visto que algunos comandos los usan indistintamente. Por ejemplo, htop
tiene una columna para PID, en la que se muestran los PID para subprocesos del mismo proceso (con diferentes valores). Entonces, ¿cuándo un PID representa un hilo o un proceso?
Es complicado: pid es identificador de proceso; tid es identificador de hilo.
Pero como sucede, el kernel no hace una distinción real entre ellos: los hilos son como procesos, pero comparten algunas cosas (memoria, fds ...) con otras instancias del mismo grupo .
Entonces, un tid es en realidad el identificador del objeto programable en el kernel (hilo), mientras que el pid es el identificador del grupo de objetos programables que comparten memoria y fds (proceso).
Pero para hacer las cosas más interesantes, cuando un proceso tiene un solo hilo (la situación inicial y en los viejos tiempos el único) el pid y el tid son siempre los mismos. Así que cualquier función que funcione con un tid funcionará automáticamente con un pid .
Vale la pena señalar que muchas funciones / llamadas al sistema / utilidades de línea de comandos documentadas para trabajar con pid realmente usan tid . Pero si el efecto es de todo el proceso, simplemente no notará la diferencia.
Solo para agregar a otras respuestas, según man gettid
:
El ID de hilo devuelto por esta llamada no es lo mismo que un ID de hilo POSIX (es decir, el valor opaco devuelto por pthread_self (3)).
¡Así que hay dos cosas diferentes que uno podría decir con TID!
pid y tid son los mismos, excepto cuando se crea un proceso con una llamada a clone
con CLONE_THREAD
(según las páginas de gettid
man de gettid
). En este caso, obtendrá un ID de hilo único, pero todos los hilos que pertenecen al mismo grupo de hilos comparten el mismo ID de proceso.
Sin embargo, también recuerdo haber leído (aunque no puedo encontrar la fuente) que los valores devueltos por getpid
pueden estar almacenados en caché.
[ACTUALIZACIÓN] Consulte la sección NOTES
here para ver una discusión sobre los efectos del almacenamiento en caché de pids
.