상세 컨텐츠

본문 제목

싱글 스레드 vs 멀티 스레드

개발 Recording/CS | 개발 지식

by sm-stack 2023. 6. 16. 01:55

본문

스레드란?

  • 프로세스가 할당받은 자원을 이용하는 실행의 단위
  • 한 프로세스 내에서 동작되는 여러 실행 흐름으로, 프로세스 내 Heap, Data, Code 영역을 공유.
  • 멀티 스레딩 → 스레드 간 자원을 공유 / 자원의 생성과 관리의 중복성을 최소화.

싱글 스레드 vs 멀티 스레드

싱글 스레드는 프로세스 내에서 하나의 메인스레드만으로 작업을 처리 → 작업을 차례대로 처리할 수밖에 없고, 만약 앞선 스레드의 처리 시간이 길어진다면 전체 작업 시간이 매우 길어지는 것처럼 느껴짐.

 

멀티 스레드를 쓰는 것이 제일 좋은가?

멀티 스레드는 CPU 활용을 최대로 끌어내기 위해 둘 이상의 스레드를 동시에 실행시킴. 그러나 이것이 완전한 병렬처리를 의미하는 것은 아니다. Context Switching을 통해 각 스레드의 작업을 빠르게 바꿔가며 처리하는 것(아래 그림 참조)

장점이라고 한다면 응답성, 경제성, 그리고 멀티 프로세서 활용이 가능(Multiple CPU)하다는 점.

CPU 계산만이 필요한 작업이라면, 오히려 멀티 스레딩은 비효율적일 수 있음(Context Switching에 시간이 걸리기 때문)

각 스레드 방식의 장단점

싱글 스레드

장점

  • Context Switching으로 인한 비용 X
  • 자원 접근에 대한 동기화 문제 X
  • CPU 계산만을 요구하는 작업에서 효율적

단점

  • 여러 개의 CPU 활용할 수 X
  • 연산량이 많은 작업을 하는 경우, 그 작업이 완료되어야 다른 작업을 수행할 수 있음
  • 에러처리 못하면 멈춤

멀티 스레드

장점

  • 에러 발생에 대한 유연성 / 응답성
  • 메모리 공간과 시스템 자원 소모에 대한 경제성
  • 멀티 프로세서 활용 가능

단점

  • 싱글 코어 멀티 스레딩에서의 비효율성
  • 동기화 문제 - 데이터와 힙 영역을 공유하기 때문에 다른 스레드에서 사용 중인 변수나 자료구조에 접근할 때 동기화 잘 되어야 함.
  • OS 지원 필요
  • 프로그래밍 난이도 높고, 스레드 수만큼 자원을 많이 소모

'개발 Recording > CS | 개발 지식' 카테고리의 다른 글

서버리스(serverless)란?  (0) 2023.06.11

관련글 더보기