본문 바로가기
CS/computer science

[기술면접] CS 문답 | 프로세스 vs 스레드, 동시성 병렬성

by 째깍단 2023. 8. 22.

 

💡 프로세스와 스레드는 무엇이고, 차이점을 설명하시오

 

프로세스 : 프로그램이 실행되어 있는 것

스레드 : 프로세스에서 일을 처리하는 단위

이지만 이 두가지의 차이점을 설명하라고 할 경우, 메인 메모리를 어떻게 사용하는가에 초점을 맞추어 설명 해야한다!

 

 

프로세스와 스레드는 메인메모리를 어떻게 사용하는가에 대한 부분에서 차이가 있습니다.

프로세스는 가상메모리를 할당 받는 반면, 스레드는 가상메모리(공유자원! 스택 코드 힙)를 공유합니다.

 

 

 

** 리눅스에서 스레드와 프로세스는 똑같은 struct(파이썬으로치면 class)를 쓴다.

더보기
  • 리눅스에서의 프로세스와 스레드 https://ljhh.tistory.com/entry/Task-Process-Thread
  •  
  • 개념적인 프로세스와 쓰레드의 구분이 있지만, 리눅스 커널은 이들을 분리해서 관리하지 않는다. 리눅스에서 프로세스와 쓰레드는 그들을 생성할때 어떤 주소 공간에 맵핑시키는가에 따라 구분되며 생성된 후에는 모두가 동일한 알고리즘에 의해 Task로서 관리되게 된다.

  • 리눅스에서는 프로세스와 쓰레드가 정확하게 같은 메카니즘으로 생성되고 같은 메카니즘으로 스위칭되며 가지고 있는 데이터 구조나 컨트롤 블록 등의 모든 구성요소가 같다. 커널 영역에서 돌아가든 유저 영역에서 돌아가든 전부 동일하게 취급하며 리눅스를 만든 사람들은 그것을 Task라고 부른다. 프로세스와 쓰레드는 개념상으로 구분해 두었을 뿐이고 실제로는 리눅스에서 task밖에 없다

 

 

 

 

💡 멀티 프로세스와 멀티스레드는 무엇이고, 차이점을 설명해보시오

 

멀티프로세스는 두 개 이상의 프로세스가 동시에 실행되는 것을 말한다.

CPU코어가 하나일 경우 CPU는 한 번에 하나의 프로세스만 연산이 가능하므로, 프로세스마다 번갈아 연산을 진행하게 된다.

사용자에게는 CPU의 연산속토가 빨라 동시에 프로세스를 실행하는 것처럼 보이므로 동시성을 가진다고 한다.

이처럼 CPU의 시간을 프로세스들이 나누어 사용하는 것을 시분할 시스템(Time Sharing System)이라 한다.

 

시분할 시스템에서, 각 프로세스마다 어디까지 명령이 수행되었는지(프로세스의 상태, 주소,테이블 등의 값)를 PCB(Process Control Block)에 저장한다. 실행중인 프로세스에서 다른 프로세스로 CPU 점유를 넘길 때 PCB에 현재 Context를 저장하고 다른 PCB의 Context를 불러오는데, 이것이 Context Switch이다.

 

 

멀티스레드는 하나의 프로세스 안에서 동시에 여러 동작을 수행하는 개념이다.

한 프로세스 안의 스레드들은 stack외의 모든 메모리 영역이 공유 가능하다. 각 스레드의 stack는 독립적인 function으로 파라미터, 리턴값, 지역변수 등이 저장된다.

멀티 프로세스보다 CPU를 더 잘게 쪼개어 사용하는 것이므로 PC register가 여러 개의 스레드 단위로 구분되게 된다.

 


 

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

 

멀티프로세스는 많은 메모리와 CPU 점유 시간을 가지며 Context Switching이 느린 반면, 멀티 스레드는 적은 메모리와 CPU 점유시간을 가지며 Conetext Switching이 빠르다.

멀티스레드는 자원을 공유하기 때문에 동기화 문제가 발생할 수 있어 멀티 프로세스에 비해 안정성이 낮다.

 

따라서 메모리를 나누어 안정성을 높일 때는 멀티프로세스를, context switching이 많고 빠른 처리속도를 요구할 경우 멀티스레드를 이용하는 것이 좋다.

 

 

 

 

 

 

💡 동시성과 병렬성을 설명하시오

 

동시성은 동시에 일어나는 것처럼 보이기만하면 되는 것, 병렬성은 실제로 동시에 병렬적으로 실행되어야함!

 

Concurrency(동시성)과 context switching

사용자에는 동시에 스레드가 실행되는 것처럼 보이지만, 프로세스 하나가 여러 작업을 돌아가면서 진행중인 것이 동시성

여러 작업을 돌아가면서 진행할때 스레드들을 변경하는 것을 context switching이라고 한다.

동시성 : 프로세스 하나가 여러 작업을 돌아가면서 일부분씩 진행

context switching : A -> B -> C 로 바꾸는 것

 

 

 

Parallelism ( 병렬성 )

프로세스 하나에 코어 여러 개가 달려서 각각의 코어가 동시에 작업을 수행하는 것

물리적으로 여러 개가 나뉜 개념 (단일 코어에서는 불가능)

 

 


 

두가지를 비교해 이야기하자면,

동시성은 하나의 코어에서 여러 개의 작업이 동시에 실행되는 것처럼 보이는 개념이고, 빠른 시간안에 하나씩 많은 양을 처리하는 것,

병렬성은 실제로 여러개의 코어에서 동시에 물리적으로 실행되는 것을 말하며, 한 번에 여러개씩 많은 양을 처리하는 것을 말한다.

 

 

 

순차실행 / 동시성 / 병렬성

 

 

 

 

참고 :

https://seamless.tistory.com/42

https://mycup.tistory.com/416

 

표 참고하기 : https://sas-study.tistory.com/446