development

PID와 TID의 차이점

big-blog 2020. 12. 12. 12:08
반응형

PID와 TID의 차이점


PID와 TID의 차이점은 무엇입니까?

표준 대답은 PID는 프로세스 용이고 TID는 스레드 용이라는 것입니다. 그러나 일부 명령은 서로 바꿔서 사용할 수 있습니다. 예를 들어, htop동일한 프로세스의 스레드에 대한 PID가 표시되는 (다른 값으로) PID에 대한 열이 있습니다. 그렇다면 PID는 언제 스레드 나 프로세스를 나타낼까요?


복잡합니다. pid 는 프로세스 식별자입니다. tid 는 스레드 식별자입니다.

그러나 실제로 커널은 그들 사이에 실제적인 차이를 만들지 않습니다. 스레드는 프로세스와 비슷하지만 같은 그룹 의 다른 인스턴스와 일부 (메모리, fds ...)를 공유 합니다.

따라서 tid 는 실제로 커널 (스레드)에서 예약 가능한 객체 의 식별자이고 pid 는 메모리와 fds (프로세스)를 공유하는 예약 가능한 객체 그룹의 식별자입니다.

그러나 더 흥미롭게 만들기 위해 프로세스에 스레드가 하나만있을 때 (초기 상황과 옛날에는 유일한 스레드) pidtid 가 항상 동일합니다. 따라서 tid 와 함께 작동하는 모든 함수 는 자동으로 pid 와 함께 작동합니다 .

pid 와 함께 작동하도록 문서화 된 많은 함수 / 시스템 호출 / 명령 줄 유틸리티가 실제로 tids를 사용 한다는 점은 주목할 가치가 있습니다 . 그러나 그 효과가 프로세스 전반에 걸친다면 그 차이를 눈치 채지 못할 것입니다.


실제로 Linux 프로세스의 각 스레드는 LWP (Lightweight Process)입니다. 그래서 사람들은 스레드를 프로세스라고 부를 수 있습니다.하지만 분명히 차이가 있습니다. 프로세스의 각 스레드는 다른 스레드 ID (TID)를 가지며 동일한 프로세스 ID (PID)를 공유합니다.

pthread 라이브러리 함수로 작업하는 경우 이러한 함수는 커널 / OS 수준 스레드 ID이기 때문에 이러한 TID를 사용하지 않습니다.


다음과 같이 다른 답변에 추가하십시오 man gettid.

이 호출에 의해 반환 된 스레드 ID는 POSIX 스레드 ID와 동일하지 않습니다 (즉, pthread_self (3)에 의해 반환 된 불투명 값).

따라서 TID가 의미 할 수있는 것은 두 가지가 있습니다!


PID 및 TID는 프로세스에 대한 호출로 생성되는 경우를 제외하고 동일 cloneCLONE_THREAD(의 man 페이지 당 gettid). 이 경우 고유 한 스레드 ID를 얻지 만 동일한 스레드 그룹에 속한 모든 스레드는 동일한 프로세스 ID를 공유합니다.

그러나 반환 된 값 getpid이 캐시 될 수 있다는 읽기 (소스를 찾을 수는 없지만)도 기억 합니다.

[업데이트] 캐싱의 효과에 대한 논의는 여기NOTES 섹션을 참조하십시오 .pids

참고 URL : https://stackoverflow.com/questions/4517301/difference-between-pid-and-tid

반응형