스레드 (Thread)
- 개념
- 한 프로세스에서 실행되는 동작(기능 function)의 단위
- 하나의 프로세스 내부에 스레드가 한 개일 수도, 여러 개일 수도 있음. 이때 여러 개인 경우를 멀티 스레드(Multi Thread)
- 예) 유튜브라는 하나의 프로세스를 진행할 때 동영상 렌더링(스레드1), 댓글 조회(스레드2), 추천 동영상 탐색(스레드3) 등
- 각 스레드는 프로세스에 할당된 메모리 영역 중 코드, 데이터, 힙 영역을 공유
- 각 스레드는 스택 메모리 영역을 독립적으로 사용
- 독립적인 스택 메모리 필요
- 스레드는 하나의 실행 단위 → 함수를 호출함
- 함수를 호출하기 위해 인자 전달, return address 저장, 함수 내 지역 변수 저장 등을 위한 독립적인, 개별적인 공간 필요
- 독립적인 공간이 필요하다는 건 독립적인 함수 호출이 가능하다는 의미
- 즉, 독립적인 실행 흐름이 추가되는 것의 의미로 독립적인 스택을 할당
- 개별적인 PC (Program Counter) register 필요
- Multi Thread의 동시성(concurrency)을 위해 필요
- 여러 스레드를 동시에 처리하기 때문에, 각 스레드의 context나 PC를 독립적으로 저장할 필요
- TCB(Thread Control Block)에서 각 스레드의 PC 저장
- CPU는 실행해야 할 스레드의 PC값을 TCB를 참고하여 자신의 PC register에 저장
- 스레드 포인트 3가지
- 프로세스의 실행 단위
- 프로세스 내부에서 코드∙데이터∙힙 영역 공유
- 스택은 독립적으로 사용
멀티 스레드 (Multi Thread)
- 개념
- 하나의 프로세스를 여러 스레드로 나누어 동시에 처리하는 것
- 장점 (같은 일을 Multi Process로 하는 것과 비교)
- 메모리 공간, 시스템 자원 소모 줄어듦
- 스레드 간의 통신 방법이 간단함
- 스레드 간의 context switching이 일어날 때 캐시 메모리를 비울 필요 없음
- → 메모리를 적게 쓰고, 연산도 가볍고 빠름
- 단점
- Multi Process는 작업 간에 독립성이 유지되지만 (프로세스끼리 침범하는 게 없음) Multi Thread는 코드∙데이터∙힙 영역을 공유하기 떄문에 여기서 파생되는 문제를 신경써야 함
- 동기화 작업이 필요 (다른 스레드가 사용중인 변수나 자료구조에 접근해 엉뚱한 값을 수정하는 일 발생할 수 있음)
- → 작업 처리 순서, 공유 자원에 대한 접근 컨트롤 필요
- 병목 현상 발생해 성능 저하될 가능성이 있음 → 과도한 락으로 인한 병목 현상 줄여야 함
- Muti Process vs Multi Thread
- 멀티 프로세스
- 하나의 프로세스가 줄어도 다른 프로세스에 영향 없음
- 많은 메모리 공간, CPU 시간 차지
- 멀티 스레딩
- 적은 메모리 공간, switching이 빠름
- 동기화 문제, 하나의 스레드 죽으면 전체가 타격
멀티 프로세스 vs 멀티 스레드
멀티 프로세스
- 핵심 차이점
- 메모리에서 각각의 공간 차지 → 메모리 공간이 구분됨
- 특징
- 각각의 메모리 공간을 차지 → 메모리 공간을 많이 차지함
- Context switching 시 각각의 메모리 공간을 옮겨다녀야 함 → Context switching 속도가 느림
- 독립적인 데이터 공간 사용 → 데이터 통신 비용이 많이 듦
- 많은 메모리 공간, CPU 시간 차지 → 자원 이용 효율성이 떨어짐
멀티 스레드
- 핵심 차이점
- 코드∙데이터∙힙 영역 공유 & 스택 영역 독립적으로 사용
- 특징
- 코드∙데이터∙힙 영역 공유 → 적은 메모리 공간 사용
- Context switching 시 하나의 메모리 공간 내부 옮겨다님 → Context switching 속도가 빠름
- 데이터 영역 공유 → 데이터 통신 비용 줄어듦, 데이터 동기화 문제 가능성 있음
- 자원 이용 효율성이 좋음
비교