전공자라면 운영체제(OS) 를 배우기 때문에
프로세스와 스레드 개념을 알고 있겠지만
비전공자에게는 익숙치 않다. 😥
면접 단골 질문인 만큼
이 글을 통해 프로세스와 스레드 개념을 이해하고
차이점에 대해 간략하게나마 기억에 남기기 위해 글을 작성해둔다. 😆
0. 프로그램과 프로세스(Process)
10분 테코톡 코다님 영상에서는 프로그램과 프로세스에 대해서 피자집에 간 상황으로 비유하고 있는데
피자 레시피 = 프로그램
피자 = 프로세스
이처럼 프로그램 자체는 실행시키기 전에는 코드가 구현되어 있는 파일일 뿐
피자를 주문하기 위한 종이 레시피가 피자가 되는 것 처럼 프로그램이 실행이 되어 사용할 수 있는 무언가가 되는게
프로세스이다
1. 프로세스와 스레드의 정의
프로세스 (Process) | 스레드 (Thread) |
운영체제로부터 자원을 할당받은 작업의 단위 | 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 |
Process
Process는 위의 프로그램과 프로세스에서 알아봤다
우리는 컴퓨터를 사용할 때 여러개의 프로세스를 사용하려고 한다(코딩을 하면서 음악을 듣는다거나 등등)
이런 다수의 프로세스를 동시에 실행시키기 위해 다수의 프로세스를 시분할로, 짧은 텀을 반복하면서 전환하며 실행시킨다.
Thread
그래서 등장한게 바로 경량화된 프로세스 버전인 스레드이다
프로세스가 경령화된 프로세스 버전인 이유는 하나의 프로세스안에 다수의 스레드가 있을 때 공유되는 자원이 있기 때문이다
스레드는 코드, 데이터, 힙 영역을 공통된 자원으로 사용한다
즉 각 스레드는 각각의 스택만을 사용하는 것이다
이처럼 공유하는 자원이 있기 때문에 컨텍스트 스위칭이 일어날 때 캐싱 적중률이 올라간다
쉽게 말해 CPU에 프로세스를 모조리 다 빼고, 넣을 필요가 없게 됐다는 말이다
2. 멀티 프로세스와 멀티 스레드
* 멀티프로세스와 멀티스레드 두 가지 개념이 모두 처리방식의 일종이다
Multi-process
예를 들어 여러 사용자가 로그인을 요청하는 상황이 있다
한 프로세스는 매번 하나의 로그인만 처리 할 수 있기 때문에 동시에 처리할 수 없다
그래서 부모 프로세스가 fork를 해서 자식 여러 개의 자식 프로세스를 만들어 일을 처리하도록 한다
이 때 자식프로세스는 부모와 별개의 메모리 영역을 확보하게 된다
Multi-thread
Multi-thread는 위의 Multi-process와 다르게 한 프로세스 내에서 구분지어진 실행 단위라고 할 수 있다
실행단위는 프로세스일 수도 있고, 스레드일 수도 있다
그래서 만약 프로세스가 다수의 스레드로 구분되어 있지 않으면 단일 스레드 하나로 프로세스가 실행된다
이 때 실행단위는 프로세스 그 자체가 된다
즉 해당 프로세스의 하나밖에 없는 쓰레드가 실행 단위가 되는 것이다
프로세스에서 여러 스레드로 실행단위가 나누어지면 멀티 스레드가 된다
2-1. Multi-process와 Multi-thread의 특징
Multi-process
- 각 프로세스는 독립적
- IPC를 사용한 통신
- 자원 소모적, 개별 메로리 차지
- Context Switching 비용이 큼
- 동기화 작업이 필요하지 않음
Multi-thread
- Thread끼리 긴밀하게 연결되어 있음
- 공유된 자원으로 통신 비용 절감
- 공유된 자원으로 메모리가 효율적임
- Context Switching 비용이 적음
- 공유 자원 관리를 해야함
* 용어 정리
실행 단위 - cpu core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념
프로세스 - 하나의 스레드만 가지고 있는 단일 스레드 프로세스
동시성 - 한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 도잇에 처리하는 것처럼 보이는 것
Ref
https://www.guru99.com/difference-between-process-and-thread.html
https://devlog-wjdrbs96.tistory.com/145
https://www.youtube.com/watch?v=1grtWKqTn50
'Develop > CS' 카테고리의 다른 글
[백엔드 개발자 면접 단골 질문 뿌시기 - 2] JVM(Java Virtual Machine) 에 대해 설명 하세요 😤 (77) | 2023.12.14 |
---|---|
[백엔드 개발자 면접 단골 질문 뿌시기 - 1] 3계층 아키텍처(3 Tier- Architectur)가 뭘까? (87) | 2023.12.12 |