Process vs Thread

정미·2022년 10월 27일
0

Computer Science

목록 보기
74/81

Process

실행 중인 프로그램

  • 사용자가 작성한 프로그램이 OS에 의해 필요한 자원을 할당받아 실행 중인 것
  • 각각 독립된 메모리 영역(code, data, stack, heap)을 할당받음
  • 프로세스 = 프로그램 + 프로세스 제어블록(PCB)

Thread

프로세스 내에서 실제로 작업을 수행하는 주체

  • 모든 프로세스에는 1개 이상의 스레드가 존재한다.
  • 2개 이상의 스레드를 가지는 프로세스 = 멀티스레드 프로세스
  • 각 스레드는 stack만 따로 할당받고, code, data, heap은 한 프로세스 내에서 공유한다.

Multi Processing

하나의 응용 프로그램을 여러 개의 프로세스로 구성해서 각 프로세스가 하나의 작업을 처리하는 것

장점

  • 한 프로세스에 문제가 생겨도 다른 프로세스로 영향이 가지 않는다.

단점

  • Context Switching에서의 오버헤드
    • 공유 메모리가 없어서 캐쉬의 모든 데이터를 초기화하고 다시 캐시 정보를 불러오는 등 무거운 작업이 진행되고 많은 시간이 소모된다.
  • 프로세스간 통신 기법(Inter-Process Communication, IPC)이 어렵고 복잡하다.
    • 프로세스 사이 변수를 공유할 수 없다.

Context Switching 문맥 교환

스레드가 교체될 때 현재까지의 작업 상태나 다음 작업에 필요한 각종 데이터를 저장하고 읽어오는 작업

  • CPU가 여러 프로세스를 돌아가면서 작업을 처리한다.
  • 컴퓨터에서 동시에 처리할 수 있는 작업의 수 = CPU 코어의 수
    • 코어수보다 많은 스레드가 실행되면 각 코어는 정해진 시간 동안 여러 작업을 번갈아가며 수행한다.
  • 문맥 교환에 걸리는 시간이 커질수록 멀티 스레딩의 효율 저하
    • 많은 양의 단순한 계산은 싱글 스레드가 더 효율적일수도 있다.

Multi Threading

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

장점

  • 프로세스를 생성하고 자원을 할당하는 시스템 콜이 줄어들어서 자원을 효율적으로 관리할 수 있다.
  • 스레드 간 데이터를 주고받는 것이 간단해지고 시스템 처리량과 처리 비용이 감소한다.
  • 스레드 사이 작업량이 작아서 context switching이 빨라진다.
    • stack 영역만 처리하면 된다.
  • 프로세스 내 공유 메모리 덕분에 스레드 간 통신 부담이 적고 프로그램 응답 시간이 단축된다.

단점

  • 디버깅이 까다롭다.
  • 단일 프로세스 시스템에서는 효과를 기대하기 어렵다.
  • 다른 프로세스의 스레드를 제어할 수 없다.
  • 자원 공유시 동기화 문제가 발생한다.
  • 하나의 스레드가 문제가 발생하면 전체 프로세스가 영향을 받는다.

동시성 이슈 Concurrency Issue

스레드 간 자원 공유는 전역 변수(data segment)를 이용하므로 함게 사용할 때 충돌이 발생할 수 있다.


출처

0개의 댓글