져니의 개발 정원 가꾸기

멀티 프로세스와 멀티 스레드 본문

개발노트/CS

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

전전쪄니 2023. 6. 6. 11:25

멀티 프로세스

멀티 프로세스란, 실행 중인 프로그램 을 말한다. 어떠한 프로그램을 실행시키면 CPU스케줄링에 따라 OS로부터 실행에 필요한 메모리를 할당 받게 되는데, 이 할당받은 메모리로 실행되는 프로그램이다. OS가 프로세스를 관리할 때는 PCB(프로세스 정보 저장소)단위를 사용한다. 
예) 인터넷 아이콘을 눌러서 인터넷 창을 띄운 경우

여기서 프로세스가 하나이면 이를 싱글 프로세스(Single Process)라고 하고 여러 개의 프로세스를 만들면 이를 멀티 프로세스라고 한다.(Multi process)
예) 인터넷 아이콘을 3번(여러 번) 눌러서 3개의 창(여러 개의 창)을 띄운 경우(3의 프로세스가 돌아 감) - 텝 아님
예) 인터넷 창을 키고 엑셀 창도 키기 (두 개의 프로세스가 돌아 감)

멀티 스레드

스레드란, 실행의 한 가닥 '실'이라는 의미로서 실행 흐름 이라는 뜻이다. 쓰레드는 하나의 프로세스 내부에서 생성되는 실행가닥이라고 보면 되는데 이 프로세스 안에는 하나의 실행흐름(싱글 스레드)가 존재할 수도 있고, 두 개 이상의 실행흐름(멀티 스레드)가 존재할 수 있다.

 프로세스와는 다르게 하나의 프로그램 내부에서 생성된 여러개의 스레드들은 공유자원(eg. global variable)을 공유한다. 또한 일반적으로 하나의 코어는 한 번에 오직 하나의 스레드만 실행할 수 있다. 그러나 현대에 들어서 시스템 성능 개선을 꾀하기 위해, 하이퍼스레딩(eg. SMT)기술을 지원하여 하나의 코어가 여러개의 스레드를 병렬 실행할 수 있도록 스레드 성능을 향상시키는 하드웨어를 추가하는 경우도 있다. 대표적인 예로 IntelCPU는 코어당 2개 이상의 스레드를 지원하고 있다.

예) 인터넷 창 하나 켜서 유튜브 접속 - 프로세스 실행, 유튜브 영상보면서(thread 1), 댓글 달기 (thread 2)

멀티 태스킹

두 가지 이상의 작업(task)을 동시에 처리 하는 것. 항상 멀티 프로세스가 멀티 태스킹을 의미하는 것은 아니다.
예) 인터넷 창을 키고 엑셀 창도 키기 - 멀티 프로세스에 의한 멀티 태스킹
예) 유튜브 영상보면서(thread 1), 댓글 달기 (thread 2) - 싱글 프로세스이나 멀티 쓰레드에 의한 멀티 태스킹

 

멀티프로세스 멀티태스킹
멀티스레드 멀티태스킹

 

멀티코어 프로그래밍

CPU 칩셋에 하나보다 많으 코어가 있는 것을 멀티코어라고 한다(ex 4core). 이에 멀티 스레딩은 멀티 코어를 더 효율적으로 사용할 수 있고 concurrency(병행성)를 더 향상시킬 수 있는 기법을 제공한다.

 

parallelism(병렬성) : 하나보다 많은 태스크를 동시에 수행

concurrency(병행성) : 모든 태스크가 진행되게 끔 하나 이상의 태스크를 지원

parallelism이 없는 concurrency가 가능하다.

 

 앞서 본바와 같이 보통 하나의 코어는 하나의 스레드를 실행할 수 있다. 이에 비추어 봤을 때 싱글코어에서 parallelism(병렬성)은 실제로 동시에 병렬적으로 실행되는 것이 아닌 단순히 시간에 따라 교대로 실행된다는 것을 의미한다. 특히나 SMT나 멀티코어가 등장하기전에는 CPU스케줄러가 프로세스 사이를 빠르게 오가며 모든 프로세스를 진행시켜 마치 병렬 실행하는 것처럼 보이도록 설계 되었다. 즉, 이 또한 parallel하게 실행되는 것이 아닌 concurrent하게 실행되는 것이다.

싱글코어에서 concurrency

이와달리 멀티코어에서는 코어마다 스레드를 배정할 수 있기 때문에 concorruncy는 parallelism으로 실행될 수 있다는 것을 의미한다.

멀티코어에서 parallelism

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

  메모리,데이터 공유 작업 전환(Context Switching) 생성 비용
멀티 프로세스 X 비교적 느림 비싸다
멀티 스레드 O 비교적 빠름 비교적 저렴하다

 

멀티 프로세스 는 프로세스끼리 독립적인 메모리 공간을 할당받기 때문에 하나의 프로세스에서 오류나 예외가 발생해도 다른 프로세스에게 영향을 미치지 않는다. 하지만 독립적인 메모리 공간으로 멀티 프로세스간 작업전환은 멀티 스레드에 비해 느리다.

한편

멀티 스레드 는 하나의 공간을 할당받은 프로세스 내에서 스레드들이 자원 및 데이터를 공유하기 때문에 하나의 쓰레드에서 예외 혹은 오류가 발생하면 다른 쓰레드들에 영향을 미치게 된다. 따라서 자원을 공유한다는 점에서 멀티 프로세스보다 작업 전환 속도가 빠르지만 예외처리와 공유자원 사용에 좀 더 세심함이 필요하다.

 

참고

 

https://livebook.manning.com/book/c-plus-plus-concurrency-in-action-second-edition/chapter-1/16