- 글에 적은 내용 중 잘못된 부분은 댓글로 적어주시면 감사하겠습니다!
기술면접을 볼 때 단골 질문으로 나오는 내용이다. 프로세스(Process)와 스레드(Thread)의 차이와 각 특징에 대해서 알아본다.
프로그램
먼저 프로그램이란 어떤 작업을 위해 실행하는 파일을 의미한다. 이 파일은 흔히 우리가 작성하는 소스코드로 이루어져 있다.
하드 디스크와 같이 저장 장치에 파일이 저장되어 있지만, 메모리에는 올라가지 않은 정적인 상태다.
이 프로그램이 실행되기 위해서는 운영체제가 메모리에 코드를 올려 자원을 할당해야 한다. 이 과정에서 프로세스와 스레드가 부여된다!
프로세스
개념
프로세스는 시스템으로부터 자원을 할당받아 독립적으로 실행되는 작업(프로그램)이다.
말이 어렵다면 쉽게 말해서 하나의 프로그램이 실행되는 작업의 단위라고 보면 된다.
특징
- 하나의 프로세스는 독립적인 자원을 갖고 있다. 따라서 멀티 프로세스인 시스템에서 하나의 프로세스가 에러가 나서 종료된다 해도 다른 프로세스에는 영향을 미치지 않는다.
- CPU에 할당된 하나의 프로세스가 다른 프로세스로 전환되는 것을 Context Switching이라고 한다. 이 때문에 프로세스가 무수히 많아지면 프로세스를 변경하는데도 자원이 낭비되어 사용자 경험을 낮출 수 있다.
- 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스간 통신(IPC, Inter-process Communication)을 사용해야 한다.
스레드
개념
스레드는 하나의 프로세스 안에서 자원을 할당받고 실행되는 작업이다.
프로세스를 프로그램이 실행되는 작업의 단위로 본다면, 스레드는 하나의 프로그램 안에 이루어져있는 기능들이 실행되는 흐름의 단위로 볼 수 있다.
특징
- 프로세는 각각 독립된 자원(코드, 데이터, 힙, 스택)을 할당 받지만, 스레드는 코드와 데이터, 힙은 공유하고 스택만 할당받는다.
- 프로세스와 달리 CPU 전환이 없어 Context Swtiching이 일어나지 않는다.
- 같은 자원을 공유하기 때문에 하나의 스레드에 에러가 발생하면 다른 모든 스레드도 실행이 되지 않고 강제 종료 될 수 있다. (에러 핸들링에 따라 다름)
멀티 프로세스 vs 멀티 스레드
각각의 장단점이 존재하기 때문에 상황에 따라 다르게 사용해야 한다.
1. 멀티 프로세스
- 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향을 미치지 않는다.
- Context Switching에 오버헤드가 발생할 수 있다.
- 프로세스간 통신이 어렵다.
2. 멀티 스레드
- 기본적으로 멀티 프로세스에 비해 자원을 덜 사용하므로 메모리 자원을 아낄 수 있고, 다른 스레드간 통신 부담이 적어 응답이 빠르다.
- 다른 스레드와 자원을 공유하기 때문에 에러가 발생하면 다른 스레드에 영향을 미칠 수 있다.
- 공통 자원에 대한 동기화 작업을 신경써야 한다.
& 참고 자료
프로세스와 스레드의 차이