멀티스레드 장단점 정리

see1237·2023년 1월 10일

프로세스와 스레드 메모리할당 구조

  • 프로세스
  • 스레드

장점

  1. 응답성 
    • 프로그램의 일부분(스레드)이 중단되거나 긴 작업을 수행하더라도 프로그램의 수행이 계속 되어 사용자에 대한 응답성이 증가한다.
      • 예를 들어, 멀티 스레드가 적용된 웹 브라우저 프로그램에서 하나의 스레드가 이미지 파일을 로드하고 있는 동안, 다른 스레드에서 사용자와 상호작용 가능
  2. 경제성 
    • 프로세스 내 자원들과 메모리를 공유하기 때문에 메모리 공간과 시스템 자원 소모가 줄어든다.
      • Data와 Heap 영역을 스레드끼리 공유할 수 있어서 중복된 데이터만큼 자원(메모리)을 아낄 수 있다.
    • 컨텍스트 스위칭 비용이 적다.
      • 프로세스의 context switching과 달리 스레드 간의 context switching은 캐시 메모리를 비울 필요가 없기 때문에 더 빠르다.
      • 스레드 공유 영역(Code~Heap)은 올리고 내릴 필요가 없고 stack만 전환하면 되므로, 전환 속도가 빠르다.
  3. 확장성
    • 프로세스가 멀티 프로세서 구조의 이점을 적극적으로 활용할 수 있다.
    • 다중 CPU 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있으므로 병렬성이 증가한다.

단점

  • 여러 개의 스레드가 동일한 데이터 공간(Critical Section)을 공유하기에 동기화 문제가 발생할 수 있다.
    • 프로세스와는 달리 스레드는 데이터와 힙 영역을 공유하기 때문에 둘 이상의 쓰레드가 하나의 변수에 접근하려고 할 때 문제가 발생할 수 있다. (임계 영역? 둘 이상의 스레드가 동시에 실행하면 문제를 일으키는 코드 블록.) → 따라서 동기화가 필요
  • 주의 깊은 설계가 필요하고 디버깅이 어렵다.
    • 불필요한 부분까지 동기화를 하는 경우, 과도한 lock으로 인해 병목 현상을 발생시켜 성능이 저하될 가능성이 높기 때문에 주의해야 한다.
  • 하나의 스레드가 전체 프로세스에 영향을 주기 때문에 안정적이지 않다.
    • 하나의 스레드가 자신이 사용하던 데이터 공간을 망가뜨린다면, 해당 데이터 공간을 공유하는 모든 스레드를 망가뜨릴 수 있어 영향을 끼칠 수 있다.
  • 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.
    • context switching, 동기화 등의 이유 때문에 싱글 코어 멀티 스레딩은 스레드 생성 시간이 오히려 오버헤드로 작용해 단일 스레드보다 느리다.

요약

장점 

- 사용자에 대한 응답성을 높일 수 있고,
- 자원을 공유하기 때문에 메모리 낭비를 줄이고 컨텍스트 스위칭 비용이 낮아 경제적이다.
- 다중 CPU 구조에서는 병렬로 수행될 수 있으므로 확장성이 증가한다.

단점

- 동일한 데이터 공간을 공유하기 때문에 동기화 문제가 발생할 수 있어, 주의 깊은 설계가 필요하다.
- 하나의 스레드가 전체 프로세스에 영향을 줄 수 있다.
- 컨텍스트 스위칭 등의 이유로 단일 스레드보다 성능이 낮을 수 있다.

0개의 댓글