스레드(Thread) 란 ?
스레드란 프로세스 내에서 실행되는 흐름의 단위 혹은 CPU 스케줄링의 기본 단위라고 할 수 있다.
프로세스 하나만을 사용하여 프로그램을 실행하기에는 메모리의 낭비가 발생하는데 스레드는 프로세스와 다르게 스레드 간 메모리를 공유하며 작동한다.
스레드는 운영체제의 스케줄러에 의해 독립적으로 관리될 수 있는 프로그래밍된 명령어의 가장 작은 시퀀스이다.
하나의 프로세스는 하나 이상의 스레드를 갖고 있다.
스레드의 특징은 다음과 같다.
- 스레드는 각자 자신의 Stack 영역을 보유한다.
- 스레드는 프로세스 내에서 Code, Data, Heap 영역을 공유한다.
- 스레드를 생성하고 switching 하는 것은 inexpensive 하다.
스레드와 프로세스의 차이
- 프로세스는 각자 프로세스간 통신에 IPC가 필요하지만 스레드는 스레드 간 통신에 IPC가 필요하지 않다.
- 각 프로세스는 Code,Data,Heap,Stack 영역을 각자 보유하는 반면, 쓰레드는 Stack을 제외한 모든 영역을 공유한다.
- 프로세스는 생성과 Context Switching에 많은 비용이 들어가지만 스레드는 적은 비용이 들어간다.
멀티 프로세스(Multiprocessing)와 멀티 쓰레드(Multithread)
멀티 프로세싱은 여러 개의 프로세스가 각자 하나의 작업(Task)을 맡아 처리하는 것을 뜻한다. 멀티 쓰레딩은 여러 개의 쓰레드가 각자 하나의 작업(task)을 맡아 처리하는 것을 뜻한다.
멀티 프로세싱
- Context Switching이 발생하면 캐시에 존재하는 모든 데이터를 리셋하고 다시 캐시 정보를 불러와야 한다. 즉 비용이 크다
- 프로세스 간 통신에 복잡한 IPC를 사용해 통신해야 한다.
- 여러 개 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스에만 이상이 생기고 다른 프로세스에게는 영향을 주지 않는 장점도 존재한다.
멀티 쓰레드
- 시스템 자원 소모가 감소한다. 프로세스 생성하는 System Call이 줄어들어 자원을 효율적으로 관리할 수 있다.
- 시스템 처리량(Throughput)이 증가한다. concurrency와 paralleism을 얻을 수 있어 효율적이다.
- 프로세스 내 Data, Code, Heap 영역을 공유하기 때문에 쓰레드 간 통신이 간단하다.
- 쓰레드 간 자원을 공유하기 때문에 동기화 문제가 발생할 수 있다.
- 디버깅이 까다롭다
- 하나의 쓰레드에 문제가 발생하면 전체 프로세스에 영향을 준다.
참고 자료
https://code-lab1.tistory.com/43