본문 바로가기
CS

Process & Thread

by rewyear 2024. 8. 9.

Overview

Process란 실제 프로그램이 메모리에 loading되어 실행되는 작업을 의미하며, 

Thread는 프로세스 내에서 실행되는 흐름의 단위(Process의 subset)를 의미합니다.

 

따라서 기본적으로 하나의 프로세스는 최소 하나의 스레드(main thread)가 실행된다고 볼 수 있습니다.

 

Process

프로세스는 각각 자신만의 별도의 주소와 자원을 할당하여 사용(Code, Data, Heap, Stack영역)

하나의 프로세스는 다른 프로세스의 메모리나 리소스에 접근 불가

따라서 접근을 위해서는 IPC(Inter Process Communication) 통신을 사용하여 통신

 

Thread

스레드는 하나의 프로세스 내에서 실행되므로 스레드 생성 시 Stack영역만 새로 할당 받으며 Code, Data, Heap 영역은 공유. 따라서 다수의 스레드 간 Code, Data, Heap 영역을 공유가능하여 통신이 프로세스에 비해 수월한 편

 

Multi Process

Process와 Thread는 다중으로 병렬 동작할 수 있는데 이 중, Multi Process에 대하여 먼저 알아보겠습니다.

Multi Process의 경우 fork()를 통해 부모 프로세스로부터 새로운 프로세스가 생성이 되는데 이를 자식 프로세스라고 하며, 새로운 PID(PCB)를 갖습니다. 이로 인해 장점과 단점이 발생하는데 다음과 같습니다.

 

장점

  • 안정성: 각 프로세스들은 독립적으로 동작하기때문에, 하나의 프로세스에서 문제 발생시 다른 프로세스에 영향을 끼치지 않는다.

단점

  1. Context Switching에서의 오버헤드
    • 프로세스는 각각 자신만의 별도의 주소와 자원을 할당하고 있으며 공유하는 메모리가 없기 때문에 프로세스 간 context switching시 오버헤드 발생 등 성능 문제가 발생할 수 있다.
  2. 프로세스 간 통신 기법 IPC
    • 멀티 프로세스는 메모리 영역을 공유하지 않기 때문에 통신을 위해 반드시 IPC(Inter Process Communication)를 사용해야 하는데 사용이 복잡하고 까다로운 편이다.

 

Multi Thread

Multi Thead의 경우 하나의 응용프로그램(프로세스)에서 여러 스레드를 생성해 병렬로 처리하게 하는 방법으로

 

장점

  1. resource를 공유함으로써 메모리 공간과 시스템 자원 소모가 줄어들게 된다.
  2. Thread 간 통신 시, Data 영역 or Heap 영역을 이용해 데이터를 주고 받으므로 통신 방법이 간단하다.
  3. Context switching 시 Multi Process의 스위칭보다 비용이 적고 더 빠르다.

단점

  1. 서로 다른 스레드가 Data, Heap 영역 등을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용중인 변수나 자료구조에 접근하여 잘못된 값을 읽어오거나 수정할 수 있다. 이는 안전성 측면에서 큰 문제가 되며  때문에 동기화(Synchronization)를 통해 임계 영역(Critical Section)을 구성해야 한다. 때문에 Multi Thread 프로그래밍에는 고려할 사항이 많다.(동기화, 임계영역, 교착 상태, 스케쥴링 등)
  2. 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다. (하나의 스레드로 인해 프로그램이 죽을수 있음)

이러한 Multi Thread의 단점에도 불구하고 Multi Process보다 장점(자원의 효율성, 처리 비용 및 응답시간)이 많기 때문에 Multi Thread를 주로 사용한다. 이를 위해 동기화에 대한 개념과 구현, 설계 등에 대하여 중요하게 고려해야 할 사항이며, 그에 대한 내용은 이후 포스팅에서 다룰 예정이다.

300x250

'CS' 카테고리의 다른 글

Memory type  (0) 2024.08.09