Process & Thread
목차
- 프로세스와 스레드 🌊
1. 프로세스가 뭔가요?
: 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태
2. 스레드가 뭔가요?
: 프로세스를 구성하는 더 작은 실행 단위
3. 프로세스와 스레드는 어떤 차이가 있나요?
: 프로세스는 독자적인 시스템 자원을 할당받아 다른 프로세스에 접근이 불가능하지만 스레드는 프로세스 내부에서 다른 메모리 영역을 같은 프로세스 내 다른 스레드와 공유할 수 있음- 싱글 스레드와 멀티 스레드 🌊
1. 싱글 스레드 장점
프로그래밍 난이도가 쉽고, CPU, 메모리를 적게 사용함
2. 싱글 스레드 단점
1. 여러 개의 CPU를 활용하지 못함
2. 싱글 스레드 모델은 에러 처리를 못하는 경우 멈춤
3. 멀티 스레드 장점
1. 사용자에 대한 응답성이 증가함
2. 메모리 공간과 시스템 자원 소모가 줄어듬(경제성)
4. 멀티 스레드 단점
1. 단일 스레드보다 느릴 가능성이 높음
2. 멀티 스레드 모델은 프로그래밍 난이도가 높고 스레드 수만큼 자원을 많이 사용함
1.프로세스와 스레드
프로세스가 뭔가요?
- 프로그램 : 어떤 작업을 하기 위해 실행할 수 있는 파일 또는 프로그램 .exe ex) 엑셀, 카카오톡, 크롬, …
- 프로세스 : 메모리에 적재되고 CPU 자원을 할당받아 프로그램이
실행
되고 있는 상태 멀티태스킹 : OS를 통해 CPU가 작업하는데 필요한 자원(시간)을 프로세스 또는 스레드간에 나누는 행위
코드
영역(code area) : 프로그래머가 작성한 프로그램이 코드 영역에 작성됨 - 정적영역데이터
영역(data area) : 코드가 실행되면서 사용한 변수나 파일들의 각종 데이터들이 모여있음 - 정적 영역스택
영역(stack area) : 호출한 함수가 종료되면 되돌아올 메모리의 주소를 스택에 저장하거나 변수 사용 범위에 영향을 미치는 영역을 구현 할때 사용 - 동적영역힙
영역(heap area) : 동적으로 할당되는 데이터들을 위해 존재하는 공간 - 동적 영역
- 서로 다른 프로세스 간의 메모리 공간 접근은 허용되지 않음(통신을 통해 접근해야함)
- 스레드가 뭔가요?
- 스레드 : 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위
- 일반적으로 하나의 애플리케이션(프로그램)은 하나 이상의 프로세스를 가지고 있고, 하나의 프로세스는 반드시 하나 이상의 스레드를 가짐
- 프로세스를 생성하면 기본적으로 하나의 (메인)스레드가 생성됨
메모리 관점에서 본 프로세스와 스레드- 프로세스 내에서 각각
Stack만 따로 할당
받고Code, Data, Heap 영역은 공유
- 프로세스 내에서 동작되는
여러 실행의 흐름
으로, 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유 - 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있음
- 프로세스 내에서 각각
- 스레드 : 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위
프로세스와 스레드는 어떤 차이가 있나요?
프로세스 스레드 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태 프로세스를 구성하는 더 작은 실행 단위 운영체체(OS)로부터 독자적인 시스템 자원을 할당 받음 프로세스 내부에서 다른 메모리 영역을 같은 프로세스 내 다른 스레드와 공유함
2. 싱글 스레드와 멀티 스레드
- 싱글 스레드 : 하나의 프로세스에서 오직 하나의 스레드로만 실행
- 하나의 레지스터와 스택으로 표현이 가능
- 멀티 스레드 : CPU의 최대 활용을 위해 프로그램의 둘 이상을 동시에 실행하는 기술
- context switching이 엄청 빠르게 일어나면서, 유저(=User)의 시선에서는 프로그램들이 동시에 수행되는 것처럼 보임
- 싱글 스레드 장점
- 문맥 교환(context switch) 작업을 요구하지 않음
- 자원 접근에 대한 동기화를 신경쓰지 않아도 됨
- 단순히 CPU만을 사용하는 계산작업이라면, 오히려 멀티스레드보다 싱글스레드로 프로그래밍하는 것이 더 효율적
- 프로그래밍 난이도가 쉽고, CPU, 메모리를 적게 사용함 (코스트가 적게 듬)
- 싱글 스레드 단점
- 여러 개의 CPU를 활용하지 못함
- 연산량이 많은 작업을 하는 경우, 그 작업이 완료되어야 다른 작업을 수행할 수 있음
- 싱글 스레드 모델은 에러 처리를 못하는 경우 멈춤
- 멀티 스레드 장점
- 사용자에 대한 응답성이 증가함(응답성)
- 프로세스 내 자원들과 메모리를 공유하기 때문에 메모리 공간과 시스템 자원 소모가 줄어듬(경제성)
- 멀티프로세서의 활용이 가능
- 멀티 스레드 단점
- context switching, 동기화 등의 이유 때문에 싱글 코어 멀티 스레딩은 스레드 생성 시간이 오히려 오버헤드로 작용해 단일 스레드보다 느림
- 공유하는 자원에 동시에 접근하는 경우, 프로세스와는 달리 스레드는 데이터와 힙 영역을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있어 동기화가 필요함
- 멀티 스레딩을 위해서는 운영체제의 지원이 필요
- 멀티 스레드 모델은 프로그래밍 난이도가 높고 스레드 수만큼 자원을 많이 사용함
출처