Multi thread vs Multi process

YJS·2023년 9월 22일
0

🤓오늘의 공부 주제: Multi thread와 Multi process🤓

Q. Multi thread는 무엇인가?

A. Multi thread란 하나의 process가 동시에 여러개의 일을 수행할수 있도록 해주는 것.

thread는 한 process 내에서 실행되는 동작(기능 function)의 단위. 각 thread는 속해있는 process의 Stack 메모리를 제외한 나머지 memory 영역을 공유.

Multi thread는 하나의 process에서 여러 작업을 병렬로 처리하기 위해 사용. multi thread에서는 한 process 내에 여러 개의 thread가 있고, 각 thread들은 Stack 메모리를 제외한 나머지 영역(Code, Data, Heap) 영역을 공유.

여기서 잠깐!💡 스택메모리는 제외?
thread는 process내에서 독립적인 기능을 수행. 즉, 독립적으로 함수를 호출함을 의미하고 이를 위해 stack memory가 각자 필요.
thread가 독립적인 기능을 수행 = 독립적으로 함수 호출. 스레드가 함수를 호출하기 위해서는 인자 전달, 리턴 주소 저장, 함수 내 지역변수 저장 등 스택 메모리 공간이 필요. 결과적으로 스레드는 프로세스로부터 스택 메모리 공간은 독립적 할당받고 나머지 코드, 데이터, 힙 영역은 공유하는 형태.
멀티스레드에서는 각각의 스레드마다 pc register를 가지고 있어야함. 그 이유는 한 프로세스 내에서도 스레드끼리 context switch가 일어나는데 pc register에 code address가 저장되어 있어야 이어서 실행 가능.

Q. thread는 왜 독립적인 stack memory영역이 필요한가?

A.Stack 영역은 함수 호출 시 전달되는 인자, 함수의 Return Address, 함수 내 지역변수 등을 저장하기 위한 memory 영역. thread가 process내에서 "독립적인 기능을 실행”한다는 것은 "독립적으로 함수를 호출"함을 의미. 따라서 각 thread가 독립적인 동작을 실행하기 위해서는 각 thread의 stack memory영역이 독립적이여야 함.

Q. process와 thread의 차이는?

A.process는 운영체제로부터 자원을 할당받는 작업의 단위이고 thread는 process가 할당받은 자원을 이용하는 실행의 단위입니다.

즉, process는 실행파일(program)이 memory에 적재되어 CPU를 할당받아 실행되는 것. thread는 한 process 내에서 실행되는 동작의 단위.

Q. Multi process와 Multi thread의 차이는?

A.Multit thread는 Multi process보다 적은 메모리 공간을 차지하고 context switching이 빠르다. 그러나 동기화 문제와 하나의 스레드의 장애로 전체 스레드가 종료될 위험이 존재한다. 반면 Multi process는 Multi thread보다 많은 메모리 공간과 cpu시간을 차지한다. 그러나 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높다.

멀티 프로세스와 다르게 멀티 스레드에서는 context switching시 캐시 메모리를 초기화할 필요가 없기 때문이다.

따라서 적용할 시스템에 따라 두 방법의 장단점을 고려하여 선택하면 된다. 메모리의 구분이 필요한 경우에는 멀티 프로세스가 유리하고 컨텍스트 스위칭이 자주 발생하고 데이터 공유가 빈번할 경우, 그리고 자원을 효율적으로 사용해야하는 경우에는 멀티 스레드가 유리하다.

멀티 프로세스 대신 멀티 스레드로 구현할 경우, 메모리 공간과 시스템 소모가 줄어들지만 스레드간 자원을 공유하기 때문에 동기화 문제가 발생할 수 있다. 또한 프로세스간의 통신보다 스레드간의 통신 비용이 적기 때문에 오버헤드가 적다.

💡💡 요약 💡💡

  • 멀티 프로세스: 많은 메모리 공간/cpu 시간 차지, 느린 컨텍스트 스위칭, 높은 안정성
  • 멀티 스레드: 적은 메모리 공간/cpu 시간 차지, 빠른 컨텍스트 스위칭, 낮은 안정성

출처 : 인프런 - 기출로 대비하는 개발자 전공면접 [CS 완전정복]

profile
우당탕탕 개발 일기

0개의 댓글