Last update: @1/7/2023
•
스레드(thread)
: 프로세스를 구성하는 실행의 흐름 단위
◦
하나의 프로세스는 여러 개의 스레드를 가질 수 있음
◦
스레드를 이용하면 하나의 프로세스에서 여러 부분을 동시에 실행할 수 있음
◦
전통적인 관점에서의 프로세스는 하나의 프로세스에 하나의 일만 처리하는 단일 스레드 프로세스였음. 하지만 스레드라는 개념이 도입되면서 하나의 프로세스가 여러 일을 동시에 처리할 수 있는 멀티스레드 프로세스가 됨
◦
스레드는 프로세스 내에서 각기 다른 스레드 ID, 프로그램 카운터 값을 비롯한 레지스터 값, 스택으로 구
성되어 있기에 스레드마다 각기 다른 코드를 실행할 수 있음
◦
중요한 점은 프로세스의 스레드들은 실행에 필요한 최소한의 정보(프로그램 카운터를 포함한 레지스터, 스택)만을 유지한 채 프로세스 자원을 공유하며 실행된다는 점임(힙, 데이터, 코드 영역, 파일 등)
◦
실제로 최근 많은 운영체제는 CPU에 처리할 작업을 전달할 때 프로세스가 아닌 스레드 단위로 전달함
◦
리눅스에서는 프로세스와 스레드를 태스크(task)라는 이름으로 통일하여 명명하고, 이 둘을 크게 구분 짓지 않음. 둘 다 실행의 문맥(context of execution)이라는 점에서 동등하다 간주하기 때문
◦
만약 같은 작업을 여러개 수행한다고 하면 하나의 자원을 공유하는 스레드를 여러개 실행하는 것이 더 효율적임
▪
다만, 하나의 스레드에 문제가 생기면 다른 스레드도 영향을 받을 수 있음
▪
프로세스 간 통신(IPC; Inter-Process Communication)
: 프로세스끼리 자원을 공유하고 데이터를 주고받는 것
•
공유 메모리(shared memory), 파일, 소켓, 파이프 등을 통해 통신함