-
프로세스(Process)와 스레드(Thread) (1)데일리루틴/CS 2024. 6. 10. 17:09
프로세스와 스레드
면접에서의 단골질문 "프로세스와 스레드에 대해 설명해보세요"
일반적으로 이렇게 대답한다.
프로세스는 운영체제로 부터 자원을 할당받은 작업의 단위.
스레드는 프로세스가 할당받은 지원을 이용하는 실행 흐름의 단위 입니다.여기서 과연 내가 프로세스와 스레드를 이해했는지 의문이 들 것이다.
따라서 예를 들어 설명을 한다면
1. 카카오톡이라는 exe파일이 있다. 이 exe파일은 프로그램이다.
2. 카카오톡 exe파일을 더블클릭하여 실행하였다. 이때 이 프로그램이 메모리에 올라가 동작하게 되며 이 상태를 프로세스라고 한다.
3. 카카오톡에는 여러 실행흐름이 존재하는데, 내 메세지를 보내는 실행흐름, 상대 메세지를 받는 실행흐름, 일정 시간마다 광고를 띄우는 실행흐름 등 다양한 실행흐름이 존재하고 이를 스레드라고 한다.
작업 관리자를 통해 카카오톡에서 현재 몇개의 스레드를 사용하고 있는지 확인할 수 있다.
4. 하나의 프로세스에서는 1개 이상의 스레드가 존재한다.
카카오톡의 주 스레드는 통신을 위한 스레드 사용이기 때문에 관련 지식이 부족하다면 면접 내용을 나에게 유리하게 이끌어갈 수 없어 다른 예시를 찾아봐야 한다.
프로세스와 스레드의 메모리
면접에서 직접 물어보고 싶은 부분은 일반적인 개념보다 메모리적 관점일것이다.
그래서 개념적으로 대답한다면 자연스레 추가로 질문이 들어온다.
- 프로세스와 스레드는 어떤 차이가 있죠?
- 좀 더 자세하게 설명해주세요
이와 같은 질문은 다음과 같다
"메모리와 엮어서 설명해달라", 추가적으로 "멀티 프로세스 멀티 스레드에 대해 알아?"
프로세스는 독립적인 메모리 공간을 가져 안정성이 높다.
메모리 공간을 공유하지 않기 때문에 멀티프로세스의 경우 한 프로세스가 비 정상적으로 종료되어도 다른 프로세스에 영향을 주지 않는다. 또한 각 프로세스가 통신하기 위해서는 IPC를 사용해야한다.
프로세스가 실행되기 위해 한개 이상의 스레드를 가지는데, 스레드는 프로세스와 다르게 스택영역을 제외한 메모리 영역인 코드, 데이터, 힙 영역을 공유한다.
메모리 영역을 공유하고 있기 때문에 한개의 스레드에 문제가 발생하는 경우 프로세스가 종료된다.
또한 각 스레드가 공유자원에 동시에 접근한다면 동기화 문제가 발생할 수 있다. 이 동기화 문제를 해결하기 위해 mutex 또는 semaphore를 사용한다.프로세스
- 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)으로 안정성이 높음.
- 기본적으로 프로세스당 최소 1개의 스레드를 가짐(main() → 하나의 메인 thread실행흐름)
- 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다. ( Ex. 파이프, 파일, 소켓 등을 이용한 통신 방법 이용 → 동기화 문제가 발생할 수 있다)
- 다중 CPU 시스템에서 각 프로세스를 병렬적으로 실행하여 성능을 향상 시킬 수 있음
- 멀티프로세스 같은경우 메모리, 레지스터, 캐시 모두 비우고 새로운 프로세스를 실행하는 Context Switching으로 Overhead가 발생할 확률이 높다.
스레드
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유
- 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다. 반면에 프.
- 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.(프로세스는 다른 프로세스에 직접 접근 불가능)
- 공유자원에 두개 이상의 스레드가 동시에 접근하는 경우 동기화문제가 발생함.
추가질문
이 후 들어오는 질문은 예상할 수 있을것이다.
- 멀티 프로세스 혹은 멀티 스레드를 사용해본 경험이 있나요?
- 멀티 프로세스와 멀티 스레드는 각각 어느상황에 사용되나요?
- IPC에 대해 설명해보세요.
- Context Switching에 대해 설명해보세요
- 동기화 문제를 해결하기 위해 Mutex 또는 Semaphore를 사용한다고 했는데 두개에 대해 좀 더 자세하게 설명해보세요
- 많은 프로세스, 많은 스레드를 할당한다면 속도가 빨라질까요?