1. 스레드란

  • 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
  • 모든 프로세스는 한 개 이상의 스레드가 존재하여 작업을 수행
  • 두 개 이상의 스레드를 갖는 프로세스의 경우 멀티 프로세스로 표현

  • 스레드를 사용하여 프로그램의 여러 부분을 동시에 수행 가능
  • 프로그램의 여러 부분을 수행하는 최소의 실행 단위를 스레드라고 표현

  • 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내의 Heap, Data, Code 영역 공유
  • 멀티 스레드의 경우, 스레드 간의 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력 향상

 

2. 스레드 수행 시 필요 정보

  • program counter → 프로그램의 어느 부분을 실행하고 있는지에 대한 정보 저장
  • stack 함수를 호출하는 순서(function call)에 대한 정보 저장

 

3. 스레드 메모리

  • 스레드는 각각 stack 영역은 할당 받고 나머지 영역은 공유
  • 하나의 스레드에서 오류가 발생한다면 프로세스의 다른 스레드도 모두 강제 종료

 

4. 싱글 스레드 vs 멀티 스레드

 

4.1. 싱글스레드

장점
  1. 자원 접근에 대한 동기화 X → 멀티스레드의 경우 자원 공유로 인해 동기화 고려가 필요하나 싱글 스레드의 경우 자원 동기화 고려 필요 X
  2. 문맥 교환 작업 X  문맥 교환은 여러 개의 프로세스가 하나의 프로세서를 공유할 때 발생하는 작업으로 많은 비용 필요
  3. 단순 CPU만을 사용하는 계산 작업이라면 멀티스레드 보다 싱글스레드로 프로그래밍 하는 것이 효율적
단점
  1. 여러 개의 CPU 활용 X
  2. 연산량이 많은 작업을 하는 경우 그 작업이 완료되어야 다른 작업 수행 가능
  3. 에러 처리를 못하는 경우 정지
  •  

 

4.2. 멀티스레드

장점
  1. 응답성  프로그램의 일부분이 중단되거나 긴 작업을 수행하더라도 프로그램 수행이 계속 → 사용자 응답성 증가
  2. 경제성 → 프로세스 내 자원들과 메모리를 공유하기 때문에 메모리 공간과 시스템 자원 소모 저하
  3. 멀티프로세서의 활용  다중 CPU 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행 → 병렬성 증가
단점
  1. 동기화 구조  공유하는 자원에 동시에 접근하는 경우 스레드는 데이터와 힙 영역을 공유하기 때문에 동기화 필요
  2. context switching  동기화 등의 이유로 싱글 코어 멀티 스레딩은 스레드 생성 시간이 단일 스레드 보다 속도 저하

 

 

+ Recent posts