프로세스(Process)와 스레드(Thread)의 차이

곽태민·2023년 4월 14일
0

TIL

목록 보기
7/65

프로세스(Process)란?


프로세스란 실행중에 있는 프로그램으로 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)다. 스케줄링의 대상이 되는 작업(Task) 과 같은 의미로 쓴다.

프로세스 내부에는 최소 하나의 Thread를 가지고 있는데, 실제로는 Thread 단위로 스케줄링을 한다.

하드디스크에 있는 프로그램을 실행하면, 실행을 위해서 메모리 할당이 이루어지고, 할당된 메모리 공간으로 바이너리 코드가 올라가게 된다. 이 순간을 프로세스(Process) 라고 한다.

  • 프로세스 문맥(context)
    - CPU 수행 상태를 나타내는 하드웨어 문맥
    • 프로세스 메모리 영역
      • Code 영역
        - 실행할 포로그램의 코드나 명령어들이 기계어 형태로 저장된 영역으로, CPU는 코드 영역에 저장된 명령어들을 하나씩 처리한다.
        • Data 영역
          - 코드에서 선언한 전역 변수와 정적 변수가 저장되는 영역으로, 프로그램이 실행되면서 할당되고 종료되면서 소멸한다.
        • Stack 영역
          - 함수 안에서 선언된 지역변수, 매개변수, 리터값 등이 저장된다. 함수 호출 시 기록이 되고, 종료되면 제거된다.
        • Heap 영역
          - 관리가 가능한 데이터 이외의 다른 형태의 데이터를 관리하기 위한 자유공간이다.
          - 프로세스 관련 커널 자료 구조
      • PCB (Process Control Block)
        • Kernel Stack

스레드(Thread)란?


프로세스 하나만으로 프로그램을 돌릴 수는 있다. 하지만 프로그램들이 복잡해졌고, 프로세스 하나로는 실행하기 어렵게 되었다.

프로세스를 여러개 만들기에는 서로 자기에게 할당된 구역에서만 놀 수 있다. 즉, 프로세스 안에서 실행의 단위가 더 나눠여야했다.

스레드는 프로세스 내에서 실행되는 작업 흐름의 단위다.

스레드는 한 프로세스 내에서 Stack만 따로 할당을 받고, Code, Data, Heap은 공유한다. 스레드는 프로세스 내에서 메모리를 공유하며 실행되는 흐름의 단위다.

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


멀티 프로세스

프로세스끼리는 서로의 자원에 접근하지 못하는데 멀티 프로세싱이 가능하다. 멀티 프로세싱은 한 적업을 공유하는 것이 아니라, 하나의 프로그램에서 작업을 각 프로세스가 나눠서 처리하도록 하는 것이다.

이렇게 멀티 프로세싱을 하면 한 프로세스가 죽어도 다른 작업은 끝낼 수 있다는 장점이 있지만, 프로레스를 바꿔가는 작업인 Context Switching과정에서 작업이 많이 무거워진다.

그리고 프로세스끼리 공유되는 메모리가 없기 때문에 프로세스가 바뀌는 과정에 데이터 리셋, cache 정보 불러오기 과정을 거쳐야해서 많이 무겁고 느리다.

멀티 스레드

멀티 스레드는 하나의 프로세스 내에서 여러개의 스레드를 사용하는 것으로, 각 스레드가 하나의 작업을 처리하도록 한다.

멀티스레드를 사용하면 멀티 프로세스보다 프로세스를 불러오는 작업 횟수가 줄면서 효율이 증대된다. 각 작업별로 메모리도 주고받기 쉬워서 자원 관리도 좋아진다.

하지만, 각 스레드끼리 global variable을 통해서 데이터를 공유하는데 이 과정에서 충돌이 발생하는 동기화 문제가 일어나기도 한다.

멀티 프로세스와 멀티 스레드의 차이점


일단 개념이 많으 다르다. 프로세스는 하나의 프로그램이 OS로부터 메모리를 할당을 받아 실행되고 있는 것이고, 스레드는 그 프로세스 안에서 실행되는 작업의 흐름 단위다.

프로세스는 OS에게 Stack, Heap, Data 등을 메모리 영역으로써 할당받고, 스레드는 해당 프로레스 내에서 Stack을 제외한 자원을 다른 스레드와 공유한다.

profile
Node.js 백엔드 개발자입니다!

0개의 댓글