ssung_항해일지/항해99_실전 프로젝트

실전 프로젝트 - 20일차

ssungcohol 2023. 3. 30. 23:26

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

멀티 프로세스

멀티 프로세스는 하나의 프로그램을 여러 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하는 환경이다.

  • 프로세스는 하나의 운영체제로부터 CPU시간, 주소공간, 독립된 메모리 영역(code, data, stack, heap)을 할당 받는다.
  • 각 프로세스는 독립된 주소 공간에서 실행되어 다른 프로세스의 주소 공간에 접근할 수 없다. (독립적)
  • 각 프로세스 간 IPC(Inter-Process-Communucation)를 사용해 데이터를 주고 받는다.
  • 하나의 프로세스가 잘못 되어도 프로그램은 동작한다.
  • 브라우저 중 크롬 브라우저가 멀티 프로세스로 동작한다.

장점

  • 독립된 구조이기에 안정성이 높다
    • 한 프로세스가 죽어도 다른 프로세스가 영향을 받지 않는다. 대신 느려질 수 있다. 다른 프로세스의 일을 더 해야하기 때문

단점

  • 각각 독립된 메모리 영역을 갖고 있어, 많은 메모리 공간과 CPU 시간을 차지하고 작업량이 많을수록 오버헤드가 발생한다.
  • Context Switching 비용이 커 성능 저하가 올 수 있다.

멀티 스레드

같은 프로세스 내에 둘 이상의 스레드를 동시에 실행하는 환경을 멀티 스레드 환경이라고 한다. (기본적으로 하나의 프로세스가 생성되면 하나의 스레드가 생성되고 이를 메인 스레드라고 부른다)

  • 스레드는 프로세스 내에서 stack만 따로 할당 받기 때문에 code, data, heap 영역은 공유한다.
  • Ex_인터넷 익스플로어(한 탭에 문제가 생기면 연결된 자원으로 인해 전체 탭이 무너지는 현상이 발생)

장점

  • 적은 메모리 공간을 차지하고 Context Switching이 빠르다.
  • 프로그램의 응답 시간이 단축되고 시스템의 처리율이 향상된다.
  • 시스템의 자원을 공유하므로 시스템의 자원 소모가 감소한다. (자원의 효율성 증대)
  • 프로세스간 통신(IPC)에 비해 통신 비용이 절감된다.

단점

  • 여러 개의 스레드가 자원을 공유하기 때문에 동기화 문제를 고려해야한다. (병목현상, 데드락 등..)
  • 하나의 스레드에 문제가 발생하면 전체 스레드에 영향을 미친다.
  • 멀티 스레드를 사용하는 프로그래밍에서는 코드 작성과 디버깅하기가 까다로운 경우가 많다고 한다. (이런 경우 동시성 프로그래밍 Closure, Lambda, Functional Programmin, Actor 등이 도움이 된다고 한다)
728x90