Computer Science

프로세스(Process)와 스레드(Thread)

emhaki 2023. 1. 18. 10:43
728x90
반응형
SMALL

프로세스란?

https://jokerkwu.tistory.com/89

프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이다. 코드의 집합으로 이루어진 프로그램이 실행되는 것이 프로세스이다. 즉 프로그램이 메모리에 올라와 운영체제로부터 CPU를 할당받고 프로그램이 실행되고 있는 상태. 일을 처리하는 일련의 과정을 뜻한다. 예를 들어 컴퓨터를 켰을 때 카카오톡과 크롬, 유튜브를 실행시키는 것은 각각의 프로세스를 실행시키는 것이다.

프로세스의 구조

https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4

위의 그림처럼 프로세스는 Code, Stack, Heap, Data 영역의 네가지 구조로 되어있다. 각각의 구조의 특징은 다음과 같다.

  • 코드 영역(Code area): 프로그래머가 작성한 프로그램이 코드 영역에 작성된다.
  • 데이터 영역(Data area): 코드가 실행되면서 사용한 변수나 파일들의 각종 데이터들이 모여있다.
  • 스택 영역(Stack area): 호출한 함수가 종료되면 되돌아올 메모리의 주소를 스택에 저장하거나 변수 사용 범위에 영향을 미치는 영역을 구현 할때 사용된다.
  • 힙 영역(Heap area): 동적으로 할당되는 데이터들을 위해 존재하는 공간이다.

스레드란?

할당 받은 자원을 이용하는 실행 단위이며, 프로세스 내에 여러 개가 생길 수 있다. 즉 일련의 과정을 여러개로 동시에 실행시킬 수 있는 것을 말한다. 스레드는 프로세스 내에서 각각 Stack만 따로 할당 받고 Code, Data, Heap 영역은 공유한다. 각 스레드는 스택 부분만을 따로 가지고, 코드, 데이터, 힙 영역은 공유하기 때문에 메모리 사용이 훨씬 효율적이게 된다.

🔎 예시

우리가 공유 사무실을 사용할 때 기본적으로 모니터, 복사기, 커피 머신 등이 구비되어 있다고 한다면, 사무실에 다른 회사가 입주한다고 해도 공유 자원(모니터, 복사기, 커피 머신)들은 그대로 공유할 수 있으며, 훨씬 효율적이다.

멀티 프로세스

프로세스가 동시에 2개가 실행되는 것이 멀티 프로세스이다. 하지만 정확하게 따지면 동시에 실행되는 것이 아니라 실행되는 것처럼 보이게 하는 것인데, 하나의 코어에서 하나 이상의 프로세스(스레드)가 번갈아가면서 진행되기에 동시에 진행되는 것처럼 보인다. 번갈아 실행시키는 것을 Context Switching이라고 한다.

🔎 멀티 프로세스 특징

  • 여러 개의 자식 프로세스 중 하나에 문제가 발생해도 다른 자식 프로세스에 영향이 확산되지 않으며 구현이 간단
  • 각 프로세스들이 독립적으로 동작하기 때문에 안정적
  • 멀티 스레드 보다 많은 메모리 공간과 CPU 시간을 차지
  • 작업량이 많을수록 오버헤드가 발생하고 Context Switching으로 인한 성능 저하 우려
  • 프로세스 간의 통신을 하기 위해서는 IPC를 통해야 함

🔎 예시

카카오톡을 실행할 때는 카카오톡이 CPU위에 올라오고, 크롬을 실행하게 되면 카카오톡은 준비 상태로 CPU에서 내려가게 되고, 크롬이 CPU자리에 올라오게 된다.

멀티 스레드

멀티스레드는 하나의 프로세스가 여러 작업을 여러 스레드를 사용해 동시에 처리하는 것을 의미한다. 일반적으로 멀티스레드를 사용하는 이유는 사용자와 상호작용하는 애플리케이션에서 단일 스레드로 Network 같은 DB와 같은 긴 작업을 수행하는 경우 해당 작업을 처리하는 동안 사용자와 상호작용이 불능인 상태가 될 수 있기 때문이다.

🔎 멀티 스레드 특징

  • 시스템의 자원과 처리 비용 감소(실행 속도 상승)
  • Context Switching이 빠름(스레드는 Stack영역만 처리하면 되기 때문에)
  • 스레드 간의 자원(Code, Data, Heap)을 공유하고 있기 때문에 통신의 부담이 적어 응답 시간이 빠름
  • 스레드가 개별로 유기적으로 움직이고 있기 때문에 프로그램 테스트, 디버깅이 어려움
  • 스레드 간의 데이토 공유 시 동기화 문제 발생
  • 하나의 스레드의 오류로 전체 프로세스에 문제 발생
  • 너무 많은 스레드 사용은 오버헤드를 발생

🔎 예시

익스플로러를 사용할때 위와 같은 오류가 뜨면서 모든 창들이 꺼져버리는 경험을 해봤을텐데, 이처럼 하나의 스레드 문제가 전체 프로세스에 영향을 끼치게 되는 것이 멀티스레드의 예시이다. 크롬은 멀티프로세스를 사용해 개별 창 하나가 문제가 되더라도 모든 창들이 꺼지지 않는다.

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

종류 멀티 프로세스 멀티 스레드
장점 하나의 프로세스가 죽어도 다른 프로세스에는 영향을 끼치지 않음 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리 가능

Code, Data, Heap 영역을 공유하기 때문에 데이터를 주고 받는 것이 간단해지고 자원 소모가 적음

스레드 사이 작업량이 작아 Context Switching이 빠르며 시스템 처리량 증가
단점 각각 독립된 메모리 영역을 갖고 있어 작업량이 많을수록 오버헤드가 발생하고 Context Switching으로 인한 성능 저하를 유발

프로세스 사이의 통신이 복잡
프로그램 디버깅이 까다로움

하나의 스레드에 문제가 생기면 전체적인 프로세스에 영향을 끼침

동기화 문제 발생(전역 변수를 이용하기 때문)

단일 프로세스 시스템에 효과를 기대하기 어려움

다른 프로세스에서 스레드 제어 불가


참고
https://suzyalrahala.tistory.com/53
https://velog.io/@aeong98/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COS-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C
https://cocoon1787.tistory.com/688
https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4

728x90
반응형