Tiny Star

📚 CS [ComputerScience]

Computer Science - 멀티 프로세스와 멀티 스레드

청크 2023. 11. 6. 15:22

우선 프로그램, 프로세스, 스레드에 대해 한 줄로 요약해보자면 이렇다.

 

[프로세스]

 

· 정의

: 운영체제로부터 시스템 자원을 할당받는 작업단위로, 메모리 상에서 독립적으로 실행환경을 갖춘 프로그램의 객체

 

· 특징

1) 각 프로세스는 독립적으로 코드, 데이터, 스택 등의 정보를 포함한 메모리 공간을 할당받고,

     운영체제에 의해서 개별적으로 관리된다.

2) 각 프로세스는 최소 1 개 이상의 스레드를 가진다.

3) 각 프로세스는 운영 체제에 의해서 독립적으로 관리가 되기 때문에 타 프로세스에 영향없이 실행이 가능하다.

4) 프로세스 간 통신이 필요한 경우 별도의 메커니즘 사용이 되어야 한다.

* IPC(inter-Process Communication)로 데이터 통신 가능

 

[스레드]

 

· 정의

: 프로세스 내에서 실행되는 작업의 최소 단위

 

· 특징

1) 프로세스 내 스레드들은 stack만 따로 할당 받고, code, data, heap 영역은 공유한다.

2) 개별 스레드는 별도의 Register와 Stack을 갖고, Heap 메모리는 서로 읽고 쓰기가 가능하며

프로세스 내의 주소 공간이나 자원들(Heap 공간)을 같은 프로세스 내에 스레드끼리 공유하면서 실행되기 때문에 스레드 간 통신은 비교적 쉬운 편이다.

3) 다중 스레드를 사용하면 동시 실행 시 병렬성과 응답성 향상에 좋다.

-> 병렬성 : 동시에 여러 작업을 처리하는 능력으로 작업을 동시에 처리함으로써 시스템의 성능을 향상

-> 응답성 : 사용자의 입력이나 외부 이벤트에 대한 빠른 반응을 의미하며 이벤트를 처리하는 동안 다른 작업이 지연되지 않고 실행되어야 함

4) 하나의 프로세스에 속한 스레드 간에는 컨텍스트 전환 시 비용이 적다는 장점이 있다.

 


[멀티프로세스/멀티스레드]

 

 

[멀티프로세스]

 

· 정의

: 여러 개의 프로세스가 작업을 병렬처리하면서 협렵적으로 일을 처리하는 것으로

각 프로세스 간에 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 때 사용한다.

 

: 하나의 부모 프로세스가 여러 개의 자식 프로세스를 생성함으로서 다중 프로세스를 구성하며

각각 고유한 PID(Process ID)를 통해 자식 프로세스 제어가 가능하고, 이 PID로 부모-자식 간 통신이 가능하다.

ex) 웹 브라우저의 상단 탭(Tab) 이나 새 창 : 각 브라우저 탭은 같은 브라우저 프로그램 실행이지만, 각기 다른 사이트를 실행

 

· 장점

1) 독립된 구조로 인한 프로그램 안정성

 - 여러 프로세스가 같이 작업을 수행하기 때문에 하나의 프로세스가 비정상적으로 종료되어도 타 프로세스의 작업까지 영향을 주지 않음 (비정상적 종료 프로세스의 작업까지 할당되어 느려짐)

2) 프로그램의 병렬성

 - 멀티 프로세스와 멀티 프로세서(다중의 CPU코어)의 시너지를 활용하여 성능 향상이 가능

3) 시스템 확장성

 - 여러 개의 프로세스가 동일한 데이터를 사용하여 처리하고, 이러한 데이터를 하나의 디스크에 두고

다중 프로세서가 이를 공유하기 때문에 저비용으로 시스템 규모 확장에 유리

4) 서버의 장애나 다운타임을 최소화할 수 있게 됨

 

· 단점

1) 각 프로세스마다 독립적인 메모리 공간을 할당받아 사용하기 때문에 메모리 사용량이 증가

2)Context Swichimg이 자주 일어나서 주소 공간의 공유가 잦을 경우에는 오버헤드가 발생하여 성능의 저하가 우려됨

 

[멀티 스레드]

 

· 정의

: 하나의 프로세스 안에 여러 개의 스레드가 존재하여 내부 자원을 공유하며 작업을 나누어 수행하는 것으로 하나의 프로그램에서 두가지 이상의 동작을 동시에 처리가 가능하도록 해줌

ex) 웹 서버 : 사용자가 서버 DB에 자료 요청을 하는 동안 브라우저의 다른 기능을 이용할 수 있도록 하나의 스레드가 지연되더라도 다른 스레드는 타 작업을 지속할 수 있게 됨

 

: 멀티 프로세스가 웹 브라우저에서의 여러 탭이나 창의 기능이라면 멀티 스레드는 웹 브라우저 단일 탭 또는 창 내의 브라우저 이벤트 루프, 네트워크 처리, I/O 및 기타 작업을 관리하고 처리하는데 사용

 

· 장점

1) 자원의 효율성 증대

 - 기본적으로 스레드는 프로세스보다 용량이 가볍기 때문에 시스템 자원 소모가 감소

 -  스레드는 프로세스 내에서 생성되기 때문에 기본적으로 내장되어 있는 데이터 용량이 작고 실행 환경 설정이 비교적 간단하여 생성 및 종료가 빠름

 -  힙 영역은 보통 프로세스 내의 모든 스레드에 의해 공유되는 메모리 공간인데, 이 공간을 활용하여 스레드 간 자원 공유가 가능하기 때문에 IPC를 사용하지 않고도 데이터 공유가 가능

2)Context Switching 비용 감소

 -  스위칭할 때 스레드 간에 공유하는 자원을 제외한 스레드 정보(stack, register)만을 교체하면 되므로 프로세스 컨텍스트 스위칭 비용보다 상대적으로 낮음

 

· 단점

1)안정성 문제

 -  멀티 프로세스와 달리 멀티 스레드는 하나의 스레드에서 문제가 발생한다면 타 스레드도 영행을 받아 프로그램이 전체 종료될 수 있음 (병목현상, 데드락 등)

 -  스레드에 에러가 발생할 경우 이에 대한 적절한 예외 처리를 잘 해놓는다던지, 에러 발생 시 새로운 스레드를 생성하거나 스레드 풀(Thread Pool)에서 잔여 스레드를 가져오던지 하여 프로그램 종료를

방지할 수 있지만 이럴 경우 새로운 스레드 생성 또는 작업이 없는 스레드 처리에 추가 비용이 발생

2) 동기화로 인한 성능 저하

 -  여러 개의 스레드가 공유 자원을 동시에 접근한 경우에 어느 한 곳에서 자원이 변경된다면, 접근한 스레드는 의도하지 않은 값을 읽어 서비스에 전달하여 치명적인 버그를 발생시킬 우려가 있음

 -  스레드 간 동기화 작업으로 여러 스레드들이 자원에 접근할 때 순차적으로 통제가 가능하여 동시 접근/동시 수정 현상을 발생하지 않지만 스레드 접근 제한으로 병목 현상이 일어나 성능저하 우려

3)데드락 (교착 상태)

 -  다수의 프로세스나 스레드가 서로 자원을 점유하고, 다른 프로세스나 스레드가 점유한 자원을 기다리는 상황에서 서로 대기하며 무한 루프에 빠지며 발생하는 교착상태

4)디버깅

 -  여러 개의 스레드가 동시에 실행되기 때문에 각 스레드의 동작 추적이 어려워 코드 디버깅이 어려워질 수 있지만 이는 스레드 간 상호작용 및 동기화 기법을 이해한다면 해결이 가능함