Thread
Jump to navigation
Jump to search
Overview
Thread 내용 정리
Basic
Thread
하나의 프로세스(실행 중인 프로그램)에서 각 독립적인 일의 단위인 스레드(Thread)로 여러 작업을 처리할 수 있다. 즐 하나의 프로세스에서 병렬적으로 여러 개 작업을 처리하기 위해서는 각 작업을 스레드화하여 멀티스레딩이 가능하게 해야 한다.
Process
프로세스는 사용중인 파일, 데이터, 프로세스의 상태, 메모리 영역 주소 공간, 스레드 정보, 전역 데이터가 저장된 메모리 부분 등 수 많은 자원을 포함하는 개념이다. 종종 스케줄링의 대상이 되는 작업이라고 불리기도 한다.
Thread vs Process
프로세스는 완전히 독립적이기 때문에 메모리 영역(Code, Data, Heap, Stack)을 다른 프로세스와 공유를 하지 않지만, 쓰레드는 해당 쓰레드를 위한 스택을 생성할 뿐 그 이외의 Code, Data, Heap 영역을 공유한다.
- 텍스트: PC(Program Counter) - 다음번에 실행 될 명령어의 주소를 가지고 있는 레지스터. 프로그램 코드 저장.
- 데이터: 글로벌 변수, 스태틱 변수 변수 저장.
- 힙: 메모리 관리, 동적 메모리 관리(시스템 콜로 관리).
- 스택: 임시 데이터 저장. 로컬 변수, 리턴 어드레스.
- 스택을 독립적으로 할당하는 이유
- 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소 값 및 함수 내에서 선언하는 벼수 등을 저장하기 위해 사용되는 메모리 공간이다. 따라서 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고, 이는 독립적인 실행 흐름이 추가되는 것이다. 결과적으로 실행 흐름의 추가를 위한 최소 조건이 독립된 스택을 제공하는 것이다.
- 코드 영역을 공유
- 프로세스는 독립적인 구조이기 때문에 다른 프로세스의 Code 영역에 있는 함수를 호출할 수 없다.
- 쓰레드는 Code 영역을 공유하기 때문에 두 개 이상의 쓰레드가 자신이 포함된 프로세스의 Code 영역에 있는 함수를 호출할 수 있다.
- 데이터 영역과 힙 영역을 공유
- 전역 변수와 동적 할당된 메모리 공간을 공유할 수 있고, 이를 통해 쓰레드 간 통신을 할 수 있지만 동시에 메모리에 접근하기 때문에 주의해야 한다.
멀티 프로세스의 문제점
두 개의 프로세스는 완전히 독립된 두 개의 프로그램 실행을 위해서 사용되기 때문에 컨텍스트 스위칭(프로세스의 정보를 저장하고 복원하는 일련의 과정)으로 인한 성능 저하가 발생한다.
쓰레드는 하나의 프로그램 내에서 여러 개의 실행 흐름을 두기 위한 모델이다. 하지만 쓰레드는 프로세스처럼 완전히 독립적인 구조가 아니고 쓰레드들 사이에는 공유하는 요소가 있다. 쓰레드는 이 공유하는 요소로 인해 컨텍스트 스위칭에 걸리는 시간이 프로세스보다 짧다.
- sp(Stack Pointer), fp(Frame Pointer), pc(Program Counter) 레지스터
- pc는 실행해야 할 명령어의 위치를 가리