프로그램
XXX.exe가 붙어있는 파일
프로세스
프로그램이 실행되어서 돌아가고 있는 상태
즉, 컴퓨터가 어떤 일을 하고 있는 상태
- 동시성: 프로세스 하나가 여러작업을 돌아가며 일부분씩 작동
- 병렬성: 프로세스 하나에 코어가 여러개가 달려서 각각 여러개가 돌아감
스레드
한 프로세스 안에서 여러개의 작업들을 동시에 진행할 수 있는 것
- 프로세스에서 분할된 전체 자원을 함께 씀
( ex. 크롬창에서 여러개의 기능이 돌아감 - 게임다운, 동영상 재생, 검색 등)
- 각각의 스레드는 독립적인 작업을 수행해야 하기 때문에 각자의 스택과 PC 레지스터 값을 가지고 있다.
1) 스택을 독립적으로 할당하는 이유?
- 스택? 함수 호출 시, 사용되는 메모리 공간
- 스택이 독립적이라는 것은 독립적인 함수 호출이 가능
- 독립적인 실행 흐름이 추가되는 것
2) PC Register를 스레드마다 독립적으로 할당하는 이유?
- pc 값은 명령어가 수행된 부분을 기억한다.
- 스레드는 cpu를 할당받았다가 스케줄러에 의해 다시 선점을 당하는데, 그렇기 때문에 명령어가 연속적으로 수행되지 못하고, 어느 부분까지 수행되었는지 기억할 필요가 있다.
멀티스레드
장점과 단점을 파악하기 위한 메모리 구조
장점
- 메모리 공간과 시스템 자원 소모가 줄어든다.
- 스레드 간의 통신이 필요한 경우에도 전역 변수의 공간이나 동적으로 할당된 공간이 Heap 영역을 이용하여 데이터를 주고 받기 때문에 통신 방법이 간단하다.
문제점
- 서로 다른 스레드가 데이터와 힙 영역을 공유하기 때문에 한 스레드가 다른 스레드의 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다.
- 멀티스레딩 환경에서는 동기화 작업이 필요하다.
멀티 스레드 vs 멀티 프로세스
1)멀티스레드
- 장점: 적은 메모리 공간 차지, 빠른 문맥 전환
- 문제점: 하나의 스레드가 종료되면 다른 스레드도 종료가 되는 동기화 문제가 있다.
2) 멀티 프로세스
- 장점: 다른 프로세스에 영향을 미치지 않는다.
- 단점: 메모리 공간, cpu 시간을 차지한다.