개발 학습을 하다 보면 스레드라는 말을 많이 듣지만
스레드가 정확히 어떤 개념인지 알지 못하기 때문에 스레드에 대해서 알아보겠다.
스레드란?
- Light Weight Process: 프로세스처럼 동작하지만 프로세스보다 작은 규모
- 프로세스
- 프로세스 간에는 각 프로세스의 데이터 접근이 불가 => IPC 사용
- 스레드
- 하나의 프로세스에 여러개의 스레드 생성 가능
- 스레드들은 동시에 실행 가능
- 프로세스 안에 있어서 프로세스의 데이터를 변수처럼 접근 가능
- 스레드는 각기 실행이 가능한 stack이 존재
- 스레드는 코드와 데이터를 공유
Multi Thread(멀티 스레드)
이미지출처
- 소프트웨어 병행 작업 처리를 위해 Multi Thread를 사용
멀티 프로세싱과 Thread
- 현재의 운영체제는 multiple process와 multiple threads per process를 지원
PThread
- POISX 스레드 (POSIX Threads)
Thread의 장점
- 사용자에 대한 응답성 향상
- 스레드를 나누어 실행하면 멀티태스킹이나 멀티프로세싱처럼 처리될 수 있음
- 자원 공유 효율
- IPC 기법과 같이 프로세스 간 자원 공유를 위해서 번거론 작업이 필요 없음
- 프로세스 안에 있어서 프로세스의 데이터에 모두 접근 가능
- 프로세스는 할당된 메모리 공간 안에 스레드가 들어감
- 작업이 분리되어 코드가 간결
Thread의 단점
-
스레드 중 한 스레드만 문제가 있어도 전체 프로세스에 영향을 끼침
- 멀티 프로세스
- 멀티 스레드
-
스레드를 많이 생성하면, Context Switching이 많이 일어나 성능이 저하
-
리눅스 OS에서는 Thread를 Process와 같이 다룸
- 스레드를 많이 생성하면, 모든 스레드를 스케쥴링해야 하므로, Context Switching이 빈번히 발생
Thread와 Process 비교
- 프로세스는 독립적이고 스레드는 프로세스의 서브셋
- 프로세스는 각각 독립적인 자원을 가지고 스레드는 프로세스 자원 공유
- 프로세스는 자신만의 주소 영역을 가지고 스레드는 주소 영역을 공유
- 프로세스간에는 IPC 기법으로 통신하고 스레드는 변수처럼 데이터 사용 가능
이미지출처