개발자 면접 공부/운영체제,CS

프로세스 vs 스레드

chogyujin 2022. 7. 24. 21:11
728x90

오늘은 프로세스 와 스레드에 대해 공부하겠습니다.


프로그램이란? 어떤 작업을 위해 실행할 수 있는 파일을 의미합니다.

프로세스(process)

1. 실행 중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU의 할당을 받은 작업의 단위

2. 운영체제로부터 시스템 자원을 할당 받습니다.

3. 할당 받는 시스템 자원

     1) CPU 시간

     2) 운영되기 위한 주소 공간

     3) Code, Data, Stack, Heap의 구조로 되어있는 독립된 메모리 영역.

출처 : https://github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Operating%20System/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80%20%EC%8A%A4%EB%A0%88%EB%93%9C.md

기본적으로 프로세스마다 최소 1개의 스레드를 갖습니다.(메인 스레드)

프로세스는 각각 별도의 메모리 영역(주소 공간)을 할당받습니다. [Code, Data, Stack, Heap]

한 프로세스는 다른 프로세스의 변수나 자료구조의 접근이 불가합니다. 접근을 하기 위해 IPC 통신이 필요합니다.

 


스레드(Thread)

프로세스의 실행 단위라고 할 수 있으며, 한 프로세스 내에서 동작되는 여러 실행 흐름으로 프로세스 내의 주소 공간이나 자원을 공유할 수 있습니다.

출처 : https://github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Operating%20System/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80%20%EC%8A%A4%EB%A0%88%EB%93%9C.md

스레드는 프로세스 내의 Code, Data, Heap, 영역만 다른 스레드와 공유하지만 Stack영역은 따로 할당받습니다.

스레드는 별도의 레지스터와 스택을 갖고 있으며, 다른 영역을 공유합니다. 따라서 한 스레드가 프로세스의 자원을
변경하면, 다른 스레드도 그 변경 결과를 즉시 확인이 가능합니다.

종류 요약
프로세스 자신만의 고유 공간과 자원을 할당받아 사용하는 작업의 단위
스레드 프로세스 내에서 실행되는 흐름의 단위, 다른 스레드와
프로세스의 자원과 공간을 공유하면서 사용.

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

멀티 프로세스

1. 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것.

장점 단점
여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않음  Context Swiching에서의 오버헤드(공유 메모리가 없어 캐시 메모리 초기화 등의 무거운 작업이 많음)
프로세스 간 통신 기법 IPC(IPC라는 방법을 사용해야지 프로세스 간의 자원 공유가 가능 근데 이 방법이 매우 어려움)

 

멀티 스레드

1. 하나의 응용 프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것.

2. 윈도우, 리눅스 등 많은 OS들이 멀티 프로세싱을 지원하고 있지만, 멀티 스레딩을 기본으로 함

3. 웹 서버는 대표적인 멀티 스레드 응용 프로그램이다.

장점 단점
메모리 공간과 시스템 자원 소모가 줄어들게 됨 서로 다른 스레드가 Data, Heap 영역 등을 공유하기 떄문에 어떤 스레드가 다른 스레드에서 사용중인 변수나 자료구조에
접근하여 엉뚱한 값을 읽어오거나 수정할 수 있음
스레드 간 통신시, 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap 영역을 이용해 데이터를 주고 받으므로 통신 방법이 매우 간단. 하나의 스레드에 문제가 생기면 전체 프로세스가 영양이 감
Context Switching 시, 캐시 메모리를 비울 필요가 없기 떄문에 비용이 적고 더 빠르다. 주의 깊은 설계가 필요, 디버깅이 매우 까다로움
따라서 시스템의 처리량이 향상되고 자원소모가 줄어듬, 자연스럽게 프로그램의 응답 시간이 단축.  

이를 통해 멀티 프로세스보다 멀티 스레드를 자주 사용하는 이유는
1. 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.

2. Context Switching시, 캐시 메모리를 비울 필요가 없기 떄문에 비용이 적고 더 빠르다-> Stac영역만 초기화 하면 되기떄문