티스토리 뷰

반응형

Thread


  • 실행의 가장 작은 단위
  • 스레드마다 별도의 stack과 register set이 있다. Code영역과 data영역은 공유한다.

Single-threaded 프로세스와 Multi-threaded 프로세스의 구조

  • 왜 스레드를 사용해야 하는가?
    • 더 나은 병렬성(Parallelism)으로 성능이 향상된다.
      • 프로세스보다 스레드를 생성하는 것의 오버헤드가 더 적다.
    • 자원을 더 효율적으로 사용한다.
      • 동일한 작업을 병렬적으로 실행할 때, 별개의 프로세스를 생성하는 것은 자원 낭비이다.
    • 데이터 공유가 더 쉽다.
      • IPC를 사용할 필요가 없다.

 

Concurrency vs. Parallelism


  • Parallelism (병렬성)
    • 다중 작업을 동시에 수행할 수 있는 능력
  • Concurrency (동시성)
    • Time sharing으로 인해 단위시간마다 다중작업을 빠르게 진행하여 동시에 수행하는 것처럼 보이는 능력
  • Parallelism과 Concurrency의 관계

동시성을 만족한다고 항상 병렬성을 만족하지 않는다.

 

User thread vs. Kernel thread


  • User thread
    • 커널은 user thread가 몇 개나 작동하고 있는지 알 지 못한다. (스레드가 프로그램 내에 존재해도, 커널은 프로그램의 존재 유무만 알고 스레드의 갯수는 모른다.)
    • User-level 라이브러리에 의해 관리된다.
  • Kernel thread
    • 커널이 인식할 수 있는 스케줄링이 가능한 객체

Multithreading model

 

Thread pool


  • 스레드를 사용한 기존의 실행 모델
    • 새로운 요청이 들어오면, 요청을 핸들링 하기위한 스레드를 생성하고, 작업이 끝나면 스레드를 제거한다.
    • 이 방법의 문제점
      • 스레드를 생성/제거할 때마다 오버헤드가 발생한다.
      • 스레드 생성에 제한이 없다.
  • Thread pool
    • 초기에 특정 갯수만큼의 스레드를 생성한다.
    • 새로운 요청이 들어오면 미리 선언된 스레드 풀에서 사용 가능한 스레드를 선택하고, Dispatcher를 통해 작업을 할당한다. 작업이 끝나면 다시 스레드 풀로 스레드를 반환한다.

Thread pool의 개요

반응형

'컴퓨터공학 > 운영체제' 카테고리의 다른 글

[운영체제] 데드락  (0) 2019.10.30
[운영체제] 프로세스 스케줄링  (0) 2019.10.29
[운영체제] 프로세스  (0) 2019.10.29
[운영체제] 시스템 구조  (0) 2019.10.28
[운영체제] 개요  (0) 2019.10.28
댓글