본문 바로가기

Develop/CS

[백엔드 개발자 면접 단골 질문 뿌시기 - 3] 스레드(thread)와 프로세스(process)의 차이를 설명해 줄 수 있어요? 😲

프로세스 vs 스레드 이미지 출처 guru99

 

 

전공자라면 운영체제(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

 

Process vs Thread – Difference Between Them

What is a Process? A process is the execution of a program that allows you to perform the appropriate actions specified in a program. It can be defined as an execution unit where a program runs. The O

www.guru99.com

 

https://devlog-wjdrbs96.tistory.com/145

 

[Java] 프로세스(process)와 쓰레드(Thread)의 개념과 구현

프로세스(process)란 간단히 말해서 '실행 중인 프로그램(program)'이다. 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 된다. 그리고 프로그램을 수행하는 데 필

devlog-wjdrbs96.tistory.com

 

https://www.youtube.com/watch?v=1grtWKqTn50

 

반응형