본문 바로가기
INFRA

Process와 Thread 차이점 ( Processor, Program) / Multi process와 Multi thread의 차이점

by BTC_주먹쥐고 일어서 2022. 5. 3.



ABTCEFG♪  안녕하세요, 여러분!

BTC_주먹쥐고 일어서입니다.

 

클라우드 공부나 네트워크 공부를 하면서 지겹게 듣는 프로세스와 프로세서, 프로그램

여러분들은 정확하게 그 차이를 인지하고 계시나요?

모른다면 제가 주먹쥐고 알려드립니다 뿅! 

 

 

 

Program vs Process vs Thread

Program

정적으로 존재하는 실행할 수 있는 파일 (Disk에 존재)  

Process (독립적인 개체) 

 운영체제로부터 시스템 자원을 할당받는 작업의 단위 (Memory에 존재) 

 실행중인 프로그램의 인스턴스 = 프로세스

 

 특징

  • 프로세스는 각각 독립된 메모리 영역 (code, data, stack, heap)을 할당 받음
  • 기본적으로 프로세스당 최소 1개의 스레드 가짐
  • 각 프로세스는 별도의 주소공간에서 실행
  • 프로세스는 다른 프로세스의 변수나 자료구조에 접근 X
  • 다른 프로세스의 자원에 접근하려면 프로세스간 통신 이용해야함 (ex IPC, 파이프, 파일, 소켓 등을 이용한 통신 방법) 

Thread

  • 스레드는 프로세스와 달리 stack부분을 제외한 code, data, heap 메모리 영역 공유
  • 스레드는 프로세스 내의 주소공간이나 자원들(heap)을 스레드 끼리 공유
  • 한 스레드가 프로세스 자원을 변경하면 다른 스레드도 변경결과 즉시 확인 가능 

 

 


 

 

 

 

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

멀티 태스킹 (multi tasking)

멀티 프로세스 (Multi process)

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

  • 장점
    - 여러개의 자식 프로세스 중 하나에 문제가 발생하면 자식 프로세스만 죽는 것으로 다른 프로세스에 영향X
        (→프로세스끼리 공유X)
  • 단점
    - context switching에서의 오버헤드 발생 
    - 프로세스 간 변수 공유 어려움 

멀티 스레드( multi thread)

 멀티 스레드 (Multi thread)

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

  • 윈도우, 리눅스 등 많은 운영체제들이 멀티 스레딩을 기본으로 하고 있다.
  • 웹서버는 대표적인 멀티 스레드 응용 프로그램 

 

  • 장점
    - 시스템 자원 소모 감소(자원의 효율성 증대)
      프로세스를 생성하여 자원을 할당하는 시스템콜이 줄어들어 자원을 효율적으로 관리 가능


    - 시스템 처리량 증가( 처리비용 감소)
      스레드 간 데이터를 주고 받는 것이 간단해지고 자원 소모가 줄어듬

      스레드 사이의 작업량이 작아 context switching이 빠름

    - 프로그램 응답시간 단축
      스레드는 프로세스 내의 stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적음 
  • 단점
    -
    주의 깊은 설계가 필요
    - 디버깅이 까다로움
    - 단일 프로세스 시스템의 경우 효과를 기대하기 어려움
    - 다른 프로세스에서 스레드를 제어할 수 없음 (즉, 프로세스 밖에서 스레드 각각을 제어할 수 없다.
    - 멀티 스레드의 경우 자원 공유의 문제가 발생 (동기화 문제)
    - 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향 받음

 

 


 

 

멀티 프로세스 대신 멀티 스레드를 사용하는 이유

자원의 효율성 증대

 -  멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우,

    프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리 가능 

- 스레드는 프로세스 내의 메모리를 공유하기 때문에 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어듬  


처리비용 감소 및 응답시간 단축

- 스레드 간의 통신 비용이 적어 작업들 간의 통신 부담이 줄어듬(스레드 메모리 공유) 
- 프로세스간 전환 속도보다 스레드간의 전환 속도가 더 빠름 (context switching시 스레드는 Stack 영역만 처리하기 때문) 

 

* 동기화 문제 주의 
스레드 간의 자원공유는 전역 변수(데이터 세그먼트)를 이용하므로 함께 상용할 때 충돌이 발생할 수 있음 

 

'INFRA' 카테고리의 다른 글

[Docker] Docker Buildx 란?  (0) 2023.05.25
[Docker] Dockerfile 작성법  (1) 2023.05.12
Gitlab에대해  (1) 2022.09.27
무정지를 위한 인프라 (2) 웹서버 이중화  (0) 2022.06.15
프로세스 상태 전이도  (0) 2022.05.26

댓글