Cooper's devlog

쓰레드(Thread) 본문

CS

쓰레드(Thread)

cooper_dev 2021. 1. 24. 08:59

(※위 내용은 '쉽게 배우는 운영체제'의 내용을 기반으로 해서 정리한 내용입니다.)

(※부족한 내용이나 수정할 내용있으면 피드백 부탁드립니다!)

 

1. 쓰레드 : 프로세스의 코드에 정리된 절차에 따라 CPU 작업 요청을 하는 실행 단위.

  • 프로세스 : 운영체제 입장의 작업 단위
  • 쓰레드 : CPU 입장에서의 작업 단위

 

[작업을 상대적인 크기 순으로 나열]

  • 처리(job) > 프로세스(task) > 스레드(operation)

 

[프로세스와 쓰레드의 차이?]

  • 프로세스 : 프로그램을 메모리 상에서 실행 중인 작업
  • 스레드 : 프로세스 안에서 실행되는 여러 흐름 단위

 

[용어정리]

  • 멀티태스크(multi task)  : OS가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법 (시분할기법)
  • 멀티스레드(multi thread): 프로세스 내 작업을 여러 개의 스레드로 분할하는 기법
  • 멀티프로세싱(multi process) : CPU를 여러 개 사용해서 여러 개의 스레드를 동시에 처리하는 작업 환경
  • CPU멀티스레드(CPU multi thread) : 파이프라인 기법을 이용해서 한번에 하나씩 처리할 작업을 동시에 여러 스레드를 처리하도록 만든 병렬 처리 기법

 

2. 멀티스레드 구조

2.1.멀티태스킹의 단점

멀티태스킹과 멀티스레드 차이

  • fork()
    • 프로세스 복사 시, 코드영역과 데이터 영역 일부에서 메모리 중복이 발생
    • 부모관계 일지라도 서로 독립적인 프로세스이므로 낭비 요소 제거 불가

 

단일 스레드와 멀티 쓰레드 차이

2.2.스레드

  • 비슷한 일을 하는 2개의 프로세스를 만드는 대신 코드, 데이터 등을 공유면서 여러 개의 일을 하나의 프로세스 내 작동
  • 멀티태스킹 낭비 요소를 제거하기 위해 사용

 

[멀티스레드 장점]

1. 응답성 향상 : 다른 스레드가 작업을 계속 진행해서 사용자의 작업 요구에 빨리 응답

2. 자원 공유 : 한 프로세스 내 독립적인 스레드 생성 시, 프로세스가 가진 모든 자원을 모든 스레드가 공유

3. 효율성 향상 : 불필요한 자원의 중복을 막음으로써 시스템 효율 향상

4. 다중 CPU 지원 : 2개 이상의 CPU에서 멀티스레드로 동시 처리 시, 프로세스의 처리 시간 단축

 

[멀티스레드의 단점]

  • 모든 스레드가 자원을 공유하기 때문에 한 스레드가 문제가 생기면 전체 프로세스에 영향을 미침
  • ex) 인터넷 익스플로러에서 여러 개 화면을 동시에 띄운 도중, 하나의 문제가 생기면 인터넷 익스플로러 전체 종료.

 

3. 멀티스레드 모델

  • 커널 스레드 : 커널이 직접 생성하고 관리하는 스레드
  • 사용자 스레드 : 라이브러리에 의해 구현된 일반적인 스레드

 

1. 사용자 레벨 스레드(User Level Thread)

  • 사용자 프로세스 내에 여러 스레드가 커널의 스레드 하나와 연결(1 to N 모델)
  • 라이브러리가 직접 스케줄링을 하고 작업에 필요한 정보를 처리하기 때문에 문맥교환(Context switching)이 필요없다.
  • 커널 스레드가 입출력 작업을 위해 대기 상태에 들어가면 모든 사용자 스레드가 같이 대기하게 됨
  • 한 프로세스의 타임 슬라이스를 여러 스레드가 공유하기 때문에 여러 개의 CPU를 동시에 사용할 수 없음

 

2. 커널 레벨 스레드(Kernel Level Thread)

  • 커널이 멀티스레드를 지원하는 방식
  • 하나의 사용자 스레드가 커널 스레드와 연결된다.(1 to 1 모델)
  • 독립적으로 스케줄링 되므로 특정 스레드가 대기 상태에 들어가도 다른 스레드는 계속 작업 가능
  • 커널 레벨에서 모든 작업을 지원하기 때문에 멀티 CPU 사용 가능
  • 하나의 스레드가 대기 상태에 있어도 다른 스레드는 계속해서 작업 가능
  • 단점 : 문맥 교환을 할 때 오버헤드 떄문에 느리게 작동한다.

(오버헤드 : 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간, 메모리)

 

3. 멀티 레벨 스레드(Multi level Thread)

  • 사용자 레벨 스레드와 커널 레벨 스레드의 혼합한 방식 (M to N 모델)
  • 하나의 커널 스레드가 대기 상태에 들어가면 다른 커널 스레드가 대신 작업을 하여 사용자 레벨 스레드보다 유연하게 작업할 수 있음.
  • 하지만, 커널 레벨 스레드를 같이 사용하기 때문에 여전히 문맥 교환 오버헤드가 있어 사용자 레벨만큼 빠르진 않음
  • 빠르게 움직여야 하는 스레드는 사용자 레벨 스레드 작동, 안정적으로 움직여야 하는 스레드는 커널 레벨 스레드로 작동.

'CS' 카테고리의 다른 글

프로세스(Process)  (0) 2021.01.22
Comments