Multi threading과 Multi processing의 차이

Multi threading과 Multi processing은 동시에 두가지 이상의 작업을 실행할 수 있는 역할을 하는 것은 동일하다.

둘의 차이점은 무엇일까?

용어정리

Processor

하드웨어적인 측면에서 컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛

CPU나 Microprocessor라는 하드웨어를 말하는 것으로 그 범위가 점점 축소, 명확해져 가고 있다.

Process

메모리에 적재되어 프로세서에 의해 실행중인 프로그램

운영체제로부터 자원을 할당받는 작업의 단위. 아래 4가지 영역으로 이루어져 있다.

  • Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령)
  • Data : 전역 변수, 정적 변수, 배열 등 (초기화된 데이터)
  • stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)
  • Heap : 동적 할당 시 사용 (new(), mallock() 등)
Thread

Process가 할당받은 자원을 이용하는 실행의 단위


Multi Processing

하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것이다.

multiprocessing

장점

  • 메모리 침범 문제를 OS 차원에서 해결
  • 여러 자식 프로세스 중 하나에 문제가 발생하여도 그 프로세스만 타격, 확산되지 X

단점

  • 각 프로세스가 독립된 메모리 영역 (Code, Data, Heap, Stack)을 가지고 있기 때문에 작업량이 많아지면 오버헤드가 발생함 (context switching)
  • 프로세스 간의 복잡한 통신 (IPC) 가 필요함


Multi Threading

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

multithreading

장점

  • 메모리 공간, 시스템 자원의 효율성 증가
  • Data, Heap 영역을 이용해 데이터를 주고 받으므로 스레드간 통신이 간단함
  • context switching시 비용이 적음 (code, data, heap 영역은 공유) -> 시스템 처리량 향상, 프로그램 응답 시간 단축됨

단점

  • 서로 다른 스레드가 Stack을 제외한 메모리 공간을 공유하기 때문에 동기화 문제가 발생할 수 있음
  • 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받음
  • 주의 깊은 설계가 필요하며 디버깅이 까다로움


Leave a comment