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

김민영·2023년 1월 17일
0

CS 스터디

목록 보기
13/32

멀티 프로세스

정의

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

장점

  • 여러 자식 프로세스 중 하나에 문제가 발생해도, 다른 프로세스로 영향이 확산되지 않음.

단점

  • Context Switcing 오버헤드
    • Context Switching 과정에서 캐시메모리 초기화 등 무거운 작업 진행, 시간 소모
    • 프로세스는 각각 독립된 메모리 영역을 할당 받았으므로 공유하는 메모리가 없음. Context Switching 발생 시, 모든 캐시 데이터 리셋하고 다시 캐시 정보 불러와야 함.
  • 프로세스 사이 어려운 통신 기법(IPC)
    • 프로세스끼리 변수를 공유하지 않으므로 통신이 어려움

Context Switching

  • CPU 내에서 여러 프로세스를 돌아가며 작업을 처리하는 과정
  • 동작 중인 프로세스가 대기하며 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 프로세스가 동작하며 이전에 보관했던 프로세스 상태를 복구하는 작업

멀티 스레드

정의

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

장점

  • 시스템 자원 소모 감소( 자원 효율성 증대 )
    • 프로세스 생성하여 자원 할당하는 시스템 콜이 줄어 효율적인 자원관리 가능
  • 시스템 처리량 증가 ( 처리 비용 감소 )
    • 스레드 간 데이터를 주고 받는 것이 간단해지고, 시스템 자원 소모가 줄어듦
    • 스레드 사이 작업량이 작아 Context Switching 빠름
  • 간단한 통신 방법. 프로그램 응답 시간 단축
    • 스레드는 stack 영역 제외 모든 메모리 공유하므로 통신 부담 적음

단점

  • 주의 깊은 설계 필요
  • 디버깅 까다로움
  • 단일 프로세스 시스템에선 효과 떨어짐
  • 프로세스 밖에서 스레드 제어 불가
  • 멀티 스레드는 자원 공유 문제 발생 (동기화 문제)
  • 하나의 스레드에 문제 발생 시, 전체 프로세스 영향

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

  • 프로그램을 여러 개 켜는 것보다 하나의 프로그램 안에서 여러 작업 해결하는 것.
  • 자원 효율성 증대
    • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄음.
    • 멀티 프로세싱에서 프로세스 간 Context Switching 시 단순히 CPU 레지스터 교체 뿐만이 아닌 RAM, CPU 사이 캐시메모리에 대한 데이터까지 초기화 되므로 오버헤드 큼
    • 스레드는 프로세스 내 메모리 공유하므로 데이터 통신 간단, 시스템 자원 소모 감소
  • 처리 비용 감소 및 응답 시간 단축
    • 프로세스 간 통신 (IPC) 보다 스레드 간 통신 비용 적음. 작업 간 통신 부담 감소
      • 스레드는 stack 제외 모든 데이터 공유하므로
    • 프로세스 간 전환 속도보다 스레드 간 전환 속도가 빠름
      • Context Switching 시 스레드는 stack 영역만 처리하게 때문

주의할 점

  • 동기화 문제
  • 스레드 간 자원 공유는 전역 변수(데이터 세그먼트)를 이용하므로 상용 시 충돌 발생 가능
  • 스레드 하나가 프로세스 내 자원에 영향 끼치면 모든 프로세스가 종료될 수 있음.

기타

  • IPC = Inter-Process Communication

https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

profile
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=

0개의 댓글