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

Minji·2022년 9월 11일
0

기술면접

목록 보기
1/11

멀티스레딩과 멀티 프로세스의 차이점과 무엇이 더 좋은가?

키워드 : 프로세스, 스레드, 멀티 프로세스, 멀티 스레딩

프로세스와 스레드

프로세스

  • 컴퓨터에서 연속적으로 실행되고 있는 프로그램
  • 사용자가 작성한 프로그램이 운영체제에 의해서 메모리 공간을 할당받아 실행 중인 것
  • 프로그램이 메모리에 올라가면 프로세스가 되는 인스턴스화가 일어나고 이후 CPU스케줄러에 따라서 CPU가 프로세스를 실행

스레드

  • 프로세스내에서 실행되는 흐름의 단위(실제로 작업을 수행하는 주체)
  • 프로세스의 실행 가능한 가장 작은 단위
  • 프로세스는 여러 스레드를 가진다.

멀티 프로세스

여러 프로세스를 통해 동시에 두 가지 이상의 일을 수행할 수 있는 것
하나 이상의 일을 병렬로 처리할 수 있다.
특정 프로세스의 메모리, 프로세스 중 일부에 문제가 발생해도 다른 프로세스를 이용해서 처리할 수 있기 때문에 신뢰성이 높다.

예시

웹 브라우저 : 브라우저 프로세스, 렌더러 프로세스, 플러그인 프로세스, GPU프로세스

  • 브라우저 프로세스 : 주소 표시줄, 뒤로 가기 앞으로가기 ,네트워크 요청 등
  • 렌더러 프로세스: 웹사이트가 보이는 부분의 모든 것
  • 플러그인 프로세스 : 플러그인 제어
  • GPU 프로세스 : GPU를 이용해서 화면을 그리는 부분 제어
    IPC(Inter Process Communication) : 프로세스끼리 데이터를 주고받고 공유 데이터를 관리하는 메커니즘(클라이언트와 서버의 데이터 요청,응답도 IPC의 예)
  • 스레드보다는 속도가 떨어진다.

멀티 스레드

하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미
스레드끼리 서로 자원을 공유하기 때문에 효율성이 높다.
예를 들어, 웹 요청을 처리할 떄 스레드를 사용하면 한 스레드가 중단되어도 다른 스레드는 실행 상태 일 수 있다.

장단점

장점
CPU가 여러 개일 경우에 각각의 CPU가 스레드 하나씩을 담당하는 방법으로 속도를 높일 수 있다.
단점
어떤 스레드가 먼저 실행될지 순서를 알 수 없다.공유 자원에 동시에 접근할 경우 원하지 않은 결과값을 가져올 수 있어서 동기화가 필요하다.
(동기화를 통해 스레드의 작업 처리 순서, 공유 자원에 대한 접근을 컨트롤할 수 있지만 과도한 lock으로 병목현상을 발생시켜서 성능이 저하될 가능성이 높다.)
스레드에서 에러가 나면 해당 스레드가 포함된 프로세스 전부에 영향을 준다.

공통점

여러 흐름을 동시에 수행

차이점

멀티 프로세스는 각 프로세스가 독립적인 메모리를 가지고 별도로 실행된다.

멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유한다. 멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유하기 때문에 시스템 자원의 낭비가 적다. 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업이 가능하기 때문에 사용자와의 응답성도 좋다.

그러나, 멀티 스레드는 에러에 더 취약하다는 점에서는 멀티 프로세스보다 좋지 않다.

나올 수 있는 질문형태

  • 차이점
  • 뭐가 더 좋은가

질문정리

스터디하면서 받은 질문 정리
Q. Chrome이 multi process를 채택한 이유는 무엇인가요?
A. 프로세스는 스케줄링 대상이므로 멀티프로세스를 사용하면, 문맥교환(컨텍스트스위칭)이 많이 일어나고 이는 오버헤드로 이어집니다. 스레드 또한 스케줄링 대상이고 문맥교환이 발생하지만, 자원을 공유하기 때문에 오버헤드가 프로세스에 비해 적습니다.
chrome은 각각의 tab이 process-per-tab방식을 사용하고 있는데, 만약 모든 탭들이 동일한 프로세스를 사용한다면 하나의 탭에서 에러가 발생하면 모든 탭에 에러가 발생할 것이기 때문에 멀티프로세스 방식을 채택했습니다.

참고문헌

  • 책: 면접을 위한 CS 전공지식 노트
profile
매일매일 성장하기 : )

0개의 댓글