728x90
프로세스와 스레드의 차이
프로그램(Program)
특정 작업을 위해서 실행할 수 있는 파일 (코드의 묶음)
보조기억장치에 저장되어 있음 (디스크 등)
정적인 형태
→디스크에 저장되어 있는 binary파일을 프로그램이라고 보면 된다.
프로세스(Process)
운영체제로부터 메모리를 할당 받아 실행 중인 프로그램
실행되면 주기억장치에 데이터가 적재됨 (RAM)
동적인 형태
→ 프로그램이 RAM에 적재되어 실행중인 상태인 것을 프로세스라고 할 수 있다.
프로세스의 구성 요소 (Process Control Block)
1) PID (Process ID)
- 프로세스를 식별할 수 있는 고유번호
2) Process State
- 해당 프로세스가 현재 어떠한 상태인지를 나타내는 정보로, Ready, Waiting/Block, Running, Terminated가 있다
3) Program Counter
- 해당 프로세스가 다음에 실행해야 할 명령어의 주소를 저장한다. 컨텍스트 스위칭 발생 후 프로세스를 재동작시킬 때 Program Counter에 저장된 값을 보고 다음 실행할 명령을 식별한다.
그 외 프로세스에 대한 다양한 정보들이 PCB에 저장되어 있다.
https://en.wikipedia.org/wiki/Process_control_block 참고!
프로세스의 메모리 공간
1) Code 영역
- Text 영역이라고도 불리며, 프로그램의 코드 자체를 저장하는 공간
2) Data 영역
- 프로그램의 전역 변수, 정적 변수들이 저장되는 공간
3) Heap 영역
- 동적으로 할당되는 변수가 저장되는 공간
4) Stack 영역
- 지역변수들이 저장되는 공간
스레드란(Thread)?
프로세스 내에서 실행되는 작업 단위
스레드 구성 요소 (Thread Control Block)
1) Thread ID
- 스레드를 식별할 수 있는 고유번호
2) Program Counter
- 해당 스레드가 다음에 실행해야하는 명령어의 주소를 저장한다. 프로세스와 마찬가지로 스레드끼리도 컨텍스트 스위칭이 발생하기 때문에 컨텍스트 스위칭 후 스레드를 재가동하기 위해 필요한 정보를 저장한다.
그 외 https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=bycho211&logNo=220994380643 참고!
스레드의 메모리 공간
⭐️ 스레드는 하나의 프로세스 안에서 Code, Data, Heap 영역의 데이터들을 다른 스레드들과 공유한다 ⭐️
- 스레드는 Stack 영역만을 개별적으로 할당받으며, 그 외의 데이터들은 다른 스레드들과 공유한다.
- 스레드마다 개별적으로 Stack을 할당해줌으로써, 각 스레드들의 독립적인 작업 실행을 보장한다.
프로세스와 스레드 비교
프로세스
- 프로그램이 운영체제로부터 메모리를 할당받고 실행중인 상태
- 다른 프로세스들과 자원을 공유하지 않음
- 하나의 프로그램을 여러 개의 프로세스를 이용해 작동시킬 때 (멀티 프로세싱)
- 각 프로세스마다 메모리를 할당해줘야해서 메모리 낭비가 심해질 수 있고, 컨텍스트 스위칭 시 발생하는 비용이 큼.
- 각 프로세스가 개별적으로 동작하기 때문에 하나의 프로세스에 오류가 생기더라도 다른 프로세스에는 영향을 주지 않음
- 크롬의 각 탭들은 멀티 프로세싱으로 동작
스레드
- 프로세스 내에 존재하는 프로세스의 작업 단위
- Stack 영역을 제외한 데이터들을 다른 스레드들과 공유함
- 하나의 프로세스를 여러 개의 스레드를 통해 작동시킬 때 (멀티 스레딩)
- 다른 스레드들과 자원을 공유하기 때문에 컨텍스트 스위칭 시 발생하는 비용이 적음
- 스레드들이 자원을 공유하기 때문에, 하나의 스레드에 오류가 생기거나 공유 자원을 망가트릴 시 다른 스레드들에도 영향을 줌
- Thread Safe ? - 특정 자원에 여러 개의 스레드가 동시에 접근하더라도 프로그램이 정상적으로 실행되는 경우
- 뮤택스, 세마포어 등을 활용해 구현할 수 있다.
- 하나의 크롬탭에서 실행되는 작업들이 멀티 스레드 방식으로 동작