본문 바로가기
카테고리 없음

process/thread /프로세스(Process)와 스레드(Thread)의 차이점

by hhenyy 2023. 12. 17.

프로세스의 자원 구조

프로그램이 실행되어 프로세스가 만들어지면 다음 4가지의 메모리 영역으로 구성되어 할당 받게 된다.

출처: https://inpa.tistory.com/entry/👩‍💻-프로세스-⚔️-쓰레드-차이 [Inpa Dev 👨‍💻:티스토리]

 

프로그램(Program)과 프로세스(Process)

프로세스와 스레드에 대해 알기전에 먼저 프로그램과 프로세스의 차이에 대해 알아보자.

프로그램: 실행되기 전 상태의 명령어, 코드 및 정적인 데이터의 묶음

프로세스: 실행중인 프로그램, 컴퓨터로부터 자원을 할당 받는 작업의 단위

즉, 프로그램은 실행할 수 있는 파일이고, 프로세스는 실행되고 있는 컴퓨터 프로그램이다.

 

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

이제 프로그램과 프로세스가 무엇인지는 조금이나마 알 것 같다. 그렇다면 스레드는 무엇일까?

스레드: 프로세스의 실행 단위

 프로세스 안에서 일어나는 여러 갈래의 작업을 스레드라고 한다.

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

CPU(프로세서)는 한 순간에 하나의 프로세스만 돌릴 수 있다.
이 말을 처음들으면 이상하다고 생각된다. 분명 우리는 컴퓨터를 실행하며 여려가지 프로세스를 동시에 돌리고 있기 때문이다. 하지만 사실은 컴퓨터가 여러가지 프로세스를 동시에 돌리는 것이 아니라 운영체제가 짧은 시간에 빠르게 프로세스를 교체하면서 실행하고 있기 때문에 동시에 여러 개의 작업이 실행되고 있다고 느끼는 것이다.

위의 이미지를 보면 스레드는 같은 프로세스 안에서 Code, Data, Heap 영역을 공유하는 것을 볼 수 있다. 이렇게 공유되는 자원이 있기 때문에 Context Switching이 빠르게 이루어 질 수 있다. 또한 같은 자원을 공유하기 때문에 스레드끼리의 커뮤니케이션이 프로세스간의 커뮤니케이션에 비해 더 효율적이다.

스레드의 단점
지금까지 본 내용들만 생각한다면 스레드가 프로세스에 우월하다고 생각이 된다. 하지만 스레드는 스레드만의 단점이 존재한다.

  1. 하나의 스레드에 문제가 생기면 전체 프로세스에 영향을 미친다.
  2. 자원을 공유하기 때문에 동기화 문제가 발생할 수 있다.
  3. 디버깅이 어렵다.

멀티 프로세스(Multi-Process)와 멀티 스레드(Multi-Thread)

일단 멀티 프로세스와 멀티 스레딩은 공통적으로 CPU의 최대 활용을 위해 프로그램의 둘 이상의 부분을 동시에 실행하는 기술이다.

멀티 프로세스는 부모 프로세스가 자식 프로세스를 fork()하여 자식 프로세스를 여러개 만들어 일을 처리하도록 한다.
이때 자식 프로세스는 부모와 별개의 메모리 영역을 확보하게 된다.

스레드는 한 프로세스 내에서 구분된 실행 단위이다.
프로세스 내에서 분리해서 여러 스레드로 나뉘어서 실행단위가 나뉘어지면 멀티스레드이다.