Skip to content

Instantly share code, notes, and snippets.

@torpedo87
Last active April 25, 2018 02:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save torpedo87/e91115f58b6169d7fbe1cee3269140e7 to your computer and use it in GitHub Desktop.
Save torpedo87/e91115f58b6169d7fbe1cee3269140e7 to your computer and use it in GitHub Desktop.
thread

Chapter4. Thread

  1. Thread
  • 프로세스에서 실행제어만 분리한 실행 단위
  • 프로세스는 스레드를 하나 이상 갖는다
  • 프로세스에 포함된 스레드들은 병렬로 수행되어 동시작업 가능
  • 한 프로세스 내의 스레드는 순차적으로 실행된다
  1. 프로세스를 생성하는 것보다 스레드를 생성하여 context switch 하는 것이 더 효율적인 이유?
  • 각 스레드마다 각각의 실행스택을 가지되, 프로세스의 자원과 메모리는 공유한다. 따라서 따로 메모리와 자원을 할당해 새로운 프로세스를 생성하는 것보다 스레드를 생성하여 context switch 를 하는 것이 오버헤드를 줄일 수 있다
  1. 스레드의 상태
  • 프로세스와 비슷하게 준비, 실행, 대기, 종료 상태를 갖는다. 프로세스와 다른 점은 하나의 스레드가 대기 상태로 변할 때 전체 프로세스를 대기 상태로 변화시키지 않는다
  1. 사용자 수준 스레드 (다대일)
  • 커널 도움없이 사용자 주소공간에 구현된 스레드 패키지이므로 커널은 이런 과정을 모르고 프로세스를 하나의 단위로 스케줄하므로 사용자 수준 스레드는 커널과 상관없이 스레드 라이브러리에서 유연하게 스케줄링이 가능하다
  • 스레드 사이에 커널이 개입하지 않아 속도가 빠르다
  • 다중 스레드 프로세스에 대해 프로세서 하나 할당
  • 기본 커널을 변경할 필요가 없으므로 모든 운영체제에 적용가능
  • 커널의 도움없이 스레드 교환이 가능하므로 오버헤드 감소
  • 문제점 = 한번에 하나의 스레드만 커널에 접근가능하므로 어떤 스레드가 시스템 호출을 실행하면 같은 프로세스 내의 모든 스레드가 대기 상태가 된다
  • 커널이 모르고 다중 스레드를 하나로 관리하므로 분산처리가 불가
  • 스레드간에 커널의 보호를 받을 수 없다
  1. 커널 수준 스레드 (일대일)
  • 커널에 의해 생성 삭제된다
  • 스레드 관리와 관련된 모든 작업을 커널이 지원하므로 많은 정보를 유지하기 위해 오버헤드가 증가
  • 사용자 스레드마다 커널 스레드를 매핑
  • 다중 프로세서에서 다중 스레드를 병렬로 실행가능
  1. 혼합형 스레드 (다대다)
  • 사용자 수준 스레드를 생성할 때마다 커널수준 스레드를 생성
  • 스레드 풀링 기법(스레드 재사용, 동시에 생성될 수 있는 스레드 수 제한)을 통해 오버헤드 감소
  1. 다중 프로세스
  • 각 프로세스가 다른 프로세스와 독립적으로 실행되고 각각의 자원을 할당하므로, 단일 프로세서일 경우 파일 서버가 디스크 입출력을 기다리는 동안 대기 상태가 된다
  1. 다중 스레드
  • 하나의 스레드가 대기 상태일 동안 작업에 있는 다른 스레드를 실행할 수 있다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment