프로세스(Process)란?
프로그램이 코드 덩어리라면 프로세스는 프로그램을 실행 시켜 정적인 프로 그램이 동적으로 변하여 프로그램이 돌아가고 있는 상태를 말한다.
즉 작업 중인 프로그램을 의미하며 운영체제로 부터 자원을 할당 받는 작업의 단위이다.
프로세스의 특징
- 프로세스는 각각의 독립된 메모리 영역을 할당 받는다.
- 기본적으로 프로세스당 최소 1개의 스레드를 가지고 있다.
- 각 프로세스는 별도의 주소 공간에서 실행되고 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근 할 수 없다.
- 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신을 사용해야 된다.
프로세스의 메모리 영역
- 코드 영역(Code/Text) : 프로그래머가 작성한 프로그램이 저장되는 영역
- 데이터 영역(Data) : 코드가 실행되면서 사용한 환경, 파일들의 데이터들이 모여있다.
- 스택 영역(Stack) : 호출한 함수가 종료되면 되돌아올 메모리의 주소나 지역 변수 등이 저장된다.
- 힙 영역(Heap) : 동적으로 할당되는 데이터를 위해 존재한다.
스레드(Thread)란?
하나의 프로세스 내에서 동시에 진행되는 흐름의 단위로 프로세스가 할당 받은 자원을 이용하는 실행 단위이며 프로세스 내에 여러 개가 생길 수 있다.
스레드의 특징
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당 받고 Code,Data,Heap 영역은 공유한다.
- 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로,프로세스 내의 주소 공간이나 자원들 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.
- 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유할 수 있는 반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
- 한 스레드가 프로세스 자원을 변경하면 다른 이웃 스레드도 그 변경 결과를 즉시 볼 수 있다.
Stack만 따로 할당 받는 이유
code,data,heap 영역을 공유하는 것에는 큰 문제가 되지 않지만
stack의 경우 LIFO(Last In Fitst Out.후입선출) 특징을 갖고 있기 때문에 스택이 쌓이면 위에서부터 프로세스가 섞인 채로 나오게 되므로
원활한 실행 흐름을 위해 stack만 독립적으로 존재한다.
프로세스와 스레드의 차이
각 프로세스는 독립적이며, 다른 프로세스와 작업을 공유하지 않는다.
스레드는 하나의 프로세스가 처리해야 되는 일을 메모리를 공유하여 나눠서 할 수 있다.
프로세스를 실행하다가 오류가 발생하여 프로세스가 강제로 종료 된다면
공유하고 있는 파일을 손상 시키는 경우가 아니라면 아무런 영향을 주지 않지만 스레드의 경우엔 Code/Data/Heap 메모리 영역의 내용을 공유하기 때문에 어떤 스레드 하나에서 에러가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제로 종료 된다.
🙇 참고 사이트 🙇
https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4 https://net-gate.tistory.com/87 https://blog.naver.com/PostView.naver?blogId=soojin_2604&logNo=222415141309&from=search&redirect=Log&widgetTypeCall=true&directAccess=false