프로세스와 스레드

Do_Doolly·2023년 1월 3일
0

Computer Science

목록 보기
2/3
post-thumbnail
  • 글에 적은 내용 중 잘못된 부분은 댓글로 적어주시면 감사하겠습니다!

기술면접을 볼 때 단골 질문으로 나오는 내용이다. 프로세스(Process)와 스레드(Thread)의 차이와 각 특징에 대해서 알아본다.


프로그램

먼저 프로그램이란 어떤 작업을 위해 실행하는 파일을 의미한다. 이 파일은 흔히 우리가 작성하는 소스코드로 이루어져 있다.

하드 디스크와 같이 저장 장치에 파일이 저장되어 있지만, 메모리에는 올라가지 않은 정적인 상태다.

이 프로그램이 실행되기 위해서는 운영체제가 메모리에 코드를 올려 자원을 할당해야 한다. 이 과정에서 프로세스와 스레드가 부여된다!

프로세스

개념

프로세스는 시스템으로부터 자원을 할당받아 독립적으로 실행되는 작업(프로그램)이다.

말이 어렵다면 쉽게 말해서 하나의 프로그램이 실행되는 작업의 단위라고 보면 된다.

특징

  • 하나의 프로세스는 독립적인 자원을 갖고 있다. 따라서 멀티 프로세스인 시스템에서 하나의 프로세스가 에러가 나서 종료된다 해도 다른 프로세스에는 영향을 미치지 않는다.
  • CPU에 할당된 하나의 프로세스가 다른 프로세스로 전환되는 것을 Context Switching이라고 한다. 이 때문에 프로세스가 무수히 많아지면 프로세스를 변경하는데도 자원이 낭비되어 사용자 경험을 낮출 수 있다.
  • 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스간 통신(IPC, Inter-process Communication)을 사용해야 한다.

스레드

개념

스레드는 하나의 프로세스 안에서 자원을 할당받고 실행되는 작업이다.

프로세스를 프로그램이 실행되는 작업의 단위로 본다면, 스레드는 하나의 프로그램 안에 이루어져있는 기능들이 실행되는 흐름의 단위로 볼 수 있다.

특징

  • 프로세는 각각 독립된 자원(코드, 데이터, 힙, 스택)을 할당 받지만, 스레드는 코드와 데이터, 힙은 공유하고 스택만 할당받는다.
  • 프로세스와 달리 CPU 전환이 없어 Context Swtiching이 일어나지 않는다.
  • 같은 자원을 공유하기 때문에 하나의 스레드에 에러가 발생하면 다른 모든 스레드도 실행이 되지 않고 강제 종료 될 수 있다. (에러 핸들링에 따라 다름)

멀티 프로세스 vs 멀티 스레드

각각의 장단점이 존재하기 때문에 상황에 따라 다르게 사용해야 한다.

1. 멀티 프로세스

  • 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향을 미치지 않는다.
  • Context Switching에 오버헤드가 발생할 수 있다.
  • 프로세스간 통신이 어렵다.

2. 멀티 스레드

  • 기본적으로 멀티 프로세스에 비해 자원을 덜 사용하므로 메모리 자원을 아낄 수 있고, 다른 스레드간 통신 부담이 적어 응답이 빠르다.
  • 다른 스레드와 자원을 공유하기 때문에 에러가 발생하면 다른 스레드에 영향을 미칠 수 있다.
  • 공통 자원에 대한 동기화 작업을 신경써야 한다.


& 참고 자료

프로세스와 스레드의 차이

profile
생각하면 복잡하니까 일단 해보자

0개의 댓글