싱글 스레드 와 멀티 스레드

김효성·2022년 11월 24일
0

CS 공부일지

목록 보기
12/15

싱글그레드와 멀티 스레드는 예전에 공부했던 동기와 비동기와 유사한 개념 같다.(직렬과 병렬의 느낌?)

우선 스레드에 대해서 살표보자.

스레드란?

  • 프로세스가 할당받은 자원을 이용하는 실행의 단위
  • 한 프로세스 내에서 동작되는 여러 실행 흐름으로 프로세스 내의 Heap, Data, Code 영역을 공유
  • 하나의 프로세스 안에서 다양한 작업을 담당하는 최소 실행 단위를 스레드라고 한다.
  • 멀티 스레드의 경우, 스레드 간의 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행능력을 향상시킨다.
  • 각각의 스레드는 독립적인 작업을 수행해야 하기 때문에 고유한 ID,프로그램 카운터, 레지스터 집합, 스택을 가지고 있다.

인터넷에 비유 해보면, 크롬브라우저(프로세스)에서 네이버 접속하기(=스레드1), 음악듣기(=스레드2)

그럼 둘중에 뭐가 좋을까?

정답은 상황에 따라 다르다. 멀티스레드의 장점과 싱글 스레드의 장점을 살펴보자.

멀티 스레드의 장점

  1. 응답성: 프로그램의 일부분이 중단 될떄, 멀트 스레드 모델은 에러 발생시 새로운 스레드를 생성하여 극복한다.
    ex) 멀티 스레드가 적용된 웹 브라우저에서 한 스레드가 이미지 파일을 로드하고 있는 동안 다른 스레드에서 사용자와 상호작용 가능함

  2. 경제성 : 프로세스 내 자원들과 메모리를 공유하기 때문에 메모리 공간과 시스템 자원소모가 줄어든다.

  1. 멀티프로세서의 활용 : 다중 CPU 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있으므로 병렬성이 증가한다.

멀티 스레드의 단점

  1. context Switching, 동기화 등의 이유 때문에 싱글 코어 멀티 스레딩은 스레드 생성 시간이 오히려 단일 스레드보다 느리다.

  2. 공유하는 자원에 동시에 접근하는 경우, 프로세스와는 달리 스레드는 데이터와 힙 영역을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다.

  3. 멀티 스레딩을 위해서는 운영체제의 지원이 필요하다.

  4. 멀티 스레드 모델은 프로그래밍 난이도가 높다. 또한 스레드 수만큼 자원을 많이 사용한다.

싱글 스레드의 장점

  1. 문맥 교환(context switch) 작업을 요구하지 않는다.

    문맥교환은 여러 개의 프로세스가 하나의 프로세서를 공유할 때 발생하는 작업으로 많은 비용을 필요로 함

  2. 자원 접근에 대한 동기화를 신경쓰지 않아도 된다.

    여러 개의 스레드가 프로세스의 자원을 공유할 경우, 각 스레드가 원하는 결과를 얻게 하려면 공용 자원에 대한 접근을 제어해야 한다. 쉽게 말해, 모든 스레드가 일정 자원에 동시에 접근 하거나, 똑같은 작업을 실행하는 경우, 에러가 발생하거나 원하는 값이 나오지 않는다.

  3. CPU만을 사용하는 계산 작업이라면, 멀티스레드 보다 싱글스레드로 프로그래밍 하는 것이 더 효율적이다.
  4. 프로그래밍 난이도가 쉽고, CPU, 메모리를 적게 사용한다.

싱글 스레드의 단점

  1. 여러 개의 CPU를 활용하지 못한다.
  2. 연산량이 많은 작업을 하는 경우, 그 작업이 완료되어야 다른 작업을 수행 할 수 있다.
  3. 싱글 스레드 모델은 에러 처리를 못하는 경우 멈춘다.
profile
인생은 단방향 디자인 패턴 🏃

0개의 댓글