쓰레드는 Light Weight Process라고도 하며, 하나의 프로세스에 여러개의 스레드를 생성하는 것이 가능하다.
쓰레드들은 동시에 실행 가능하며, 프로세스 안에 있으므로, 한 프로세스 내 데이터를 모든 쓰레드가 접근 가능하다.
이전에 살펴보았듯, 하나의 프로세스는 stack, heap, data, text 영역 등으로 나누어지는데,
쓰레드는 Stack과 Heap 영역 사이의 추가적인 공간에서 별도로 Thread용 Stack영역이 할당되며,
PC, SP 또한 해당 쓰레드의 Stack 영역에 맞게 주어진다.
그리고 그 하위 DATA, TEXT영역은 모든 쓰레드가 공유할 수 있다(같은 프로세스에서 만들어진 것이므로).
최근 CPU는 멀티코어를 가지므로, Thread를 여러 개 만들어 멀티코어 활용도를 높일 수 있다.
쓰레드 하나가 사용자와 커뮤니케이션을 하는 동안, 다른 쓰레드는 사용자가 요청한 것을 처리할 수 있다(백그라운드에서 동작).
–> 멀티 태스킹 or 멀티 프로세싱처럼 동시에 실행되고 있는 것 처럼 보일 수 있다.
프로세스 내 데이터에 모두 접근이 가능하기 때문에, IPC 기법과 같이 프로세스간 자원 공유를 위한 번거로운 작업이 필요없음.
멀티 프로세스는 프로세스 하나가 죽어도 다른 프로세스는 돌 수 있지만,
멀티 쓰레드는 하나가 죽으면 전체 프로세스가 죽게 된다.
쓰레드 또한 프로세스처럼 스케쥴링을 해야 하므로, 오버헤드가 많이 발생할 수 있다.
쓰레드와 프로세스의 차이를 정리하면,
1) 프로세스는 독립적, 쓰레드는 프로세스의 서브셋이다.
2) 프로세스는 각각 독립적인 자원을 지니나, 쓰레드는 한 프로세스 자원을 공유한다.
3) 프로세스는 자신만의 주소영역을 가지나, 쓰레드는 주소영역을 공유한다.
4) 프로세스 간에는 IPC기법으로 통신하지만, 쓰레드는 그럴 필요가 없다.
위 내용은 ‘패스트캠퍼스’의 컴퓨터공학 강좌 내용을 요약 정리한 것임을 밝힙니다. (https://www.fastcampus.co.kr/)