[CS-OS] Multithreading #2 - Multithread & Multiprocess

sing sang song·2023년 3월 27일
0

CS

목록 보기
6/8
post-thumbnail

(1) 멀티 스레드

  • 한 개의 단일 어플리케이션(응용프로그램) -> 여러 스레드로 구성 후 작업 처리
  • 시스템 자원 소모 감소(효율성), 처리량 증가(Cost 약간 감소)
  • 통신 부담이 감소, 디버깅은 어렵다, 단일 프로세스에는 효과가 미약하다(좋은 성능의 cpu가 많이 나왔기 때문), 자원 공유 문제(교착 상태), 프로세스 영향을 준다.

(2) 멀티 프로세스

  • 한 개의 단일 어플리케이션(응용프로그램) -> 여렆로세스 구성 후 작업처리
  • 한 개의 프로세스 문제 발생은 확산이 없다.(프로세스 kill)
  • 캐시 체인지, Cost 비용이 매우 높다.(오버헤드 상승) 왜? 복잡한 통신 방식을 사용하기 때문이다.

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

  • 멀티스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching 이 빠른 장점이 있지만, 동기화 문제와 하나아ㅢ 스레드 장애로 전체 스레드가 종료될 위험을 가지고 있다.
  • 멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안전성이 높지만, 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지하는 단점이 있다.
  • 두 방법은 동시에 여러 작업을 수행하는 점에서 동일하지만, 각각의 장단이 있으므로 적용하는 시스템에 따라 적합한 동작 방식을 선택하고 적용해야 한다.

왜 멀티 프로세스로 할 수 있는 작업들을 굳이 하나의 프로세스에서 스레드로 나눠가며 하는 것일까?

  • 운영체제가 시스템 자원을 효율적으로 관리하기 위해 스레드를 사용한다.
  • 멀티 프로세스로 실행되는 작업을 멀티스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
  • 또한, 프로세스 간의 통신보다 스레드 간의 통신 비용이 적으므로 작업들 간 통신의 부담이 줄어든다. (처리비용 감소 -> 프로세스는 독립구조이기 때문이다)

그렇다면 무조건 멀티 스레드가 좋을까?

  • 스레드를 활용하면 자원의 효율성이 증가하기도 하지만, 스레드 간의 자원 공유는 전역 변수를 이용하므로 동기화 문제가 발생 할 수 있으므로 프로그래머의 주의가 필요하다.

Reference
wooody92- 멀티프로세스와 멀티스레드

profile
세상을 선명하게

0개의 댓글