본문 바로가기
CS

chapter04. Threads

by angrxxeon 2023. 1. 14.

Threads

cpu 이용의 기본 단위

여러 작업을 하는 응용프로그램은 각 작업 별로 스레드를 생성해서 구현가능

장점 : 프로세스 생성은 스레드 생성에 비해 할일 이 많고 시간이 많이 드는 작업이기때문에 스레드를 사용하면 코드를 간결하게 만들고 효율이 증가한다.

ex)워드프로세서 안에 그래픽을 표시하는 스레드+키보드 입력을 받는 스레드+문법을 체크하는 스레드

대부분의 현대 응용프로그램은 다중스레드를 사용한다.

소프트웨어적인 논리 개념

이점

  • 응답성
  • 프로세스의 일부가 블록 되더라도(멈추거나 작업시간이 너무 길었을때) 계속 실행이 가능하다.(분리가 가능하다)
  • 자원 공유
  • 스레드는 공유 메모리나 메세지 전달을 사용하는 것보다 더 쉽게 프로세스의 자원을 공유한다
  • 경제성
  • 스레드 생성은 프로세스 생성보다 비용이 적게 들고, 스레드 교환도 문맥 교환의 오버헤드가 더 적다.
  • 확장성
  • 프로세스는 다중처리기 아키테거의 이점 활용이 가능하다.

다중스레드 서버 아키텍처

ex ) 웹서버

클라이언트 요청을 listen하는 별도의 스레스 생성 → 요청이 들어오며느 요청을 서비스할 새로운 스레드를 생성

은행원이 여러명이 되어버림(멀티코어) →번호표를 뽑고 은행원에게 배정(서버)→은행원이 부름(스레드 생성-cpu이용)

다중코어 프로그래밍

다중코어 혹은 다중처리기 시스템을 위한 프로그래머의 도전

  • 태스크 식별
  • 균형맞추기 - 코어가 골고루 일을 할 수 있도록 분배
  • 데이터 쪼개기 - 프로그램이 실행될때 필요한 변수들을 잘 분배, 공용으로 사용하는 변수들은 순서 문제까지 생각
  • 데이터 의존성 - 하나의 job을 끝내면 연결고리가 있고 하나의 코어에서 계속 일을하게됨,
  • 검증 및 디버깅 - 문제가 발생할때, 디버깅해야함

병렬 수행 - 둘 이상의 태스크를 동시에 실행할 수 있는 시스템을 의미,(코어가 2개,3개)

데이터 병렬 수행

-동일한 데이터의 일부를 여러 코어에 분배하고 각 코어에서 동일한 연산을 수행

태스크 병렬 수행

-코어에 스레드를 분배하고 각 스레드는 자신만의 연산을 수행 (작업별로 스레드 분리)

스레드의 수가 증가할수록, 스레드를 위한 컴퓨터 구조의 지원도 증가

병행 수행 - 둘 이상의 태스크가 진행할 수 있도록 지원. 하나의 처리기/코어 스케줄러는 병행 수행을 지원한다.

스레드 라이브러리

: 스레드를 생성하고 관리할 수 있는 API를 프로그래머에게 제공

완전히 사용자 공간에서만 라이브러리 제공

  • 커널의 지원이 없음
  • 모든 코드와 자료구조는 사용자 공간에 존재(프로세스 안에서 임의적으로, 시스템과 코어에서는 인정하지않음)
  • 라이브러리 함수 호출→ 지역함수 호출

OS에 의해 지원되는 커널 수준 라이브러리

  • 모든 코드와 자료구조는 커널 공간에 존재
  • 라이브러 함수 호출→시스템 콜 호출

Pthreads

사용자 수준 혹은 커널 수준에서 제공한다. 유닉스 계열에서는 표준 라이브러리에 스레드가 Pthread라는 이름으로 생성되어진다. 구현하고 사용하는것은 개발자의 몫.

Java 스레드

Java 스레드 API는 직접 스레드 생성과 관리를 한다. JVM은 호스트 운영체제에서 구현되고 호스트 운영체제에서 제공되는 스레드 라이브러리를 사용하여 구현한다.

Runnable이라는 인터페이스를 통해서 스레드 생성

다중 스레드 모델

사용자 스레드 - 사용자 수준 스레드 라이브러리에 의해 관리

커널 스레드 - 운영체제에 의해 직접 지원 및 관리 운영체제에서도 작업단위로 인지, 스레드 ID가 있음

 

다-대-일

다수의 사용자 수준 스레드가 하나의 커널 스레드에 매핑된다.

한 스레드가 블록되면 다른 모든 스레드도 블록

한 순간에 오직 하나의 사용자 스레드만이 커널에 존재할 수 있기 때문에 다중 코어 시스템에서도 여러 스레드가 병렬로 실행될 수없다.

현재 이 모델을 사용하는 시스템은 거의 없다.

일-대-일

각 사용자 스레드는 커널 스레드로 매핑된다.

사용자 스레드를 생성하면 커널 스레드도 같이 생성된다 → 다-대-일 모델보다 병렬 수행이 가능해진다.

프로세스당 스레드의 개수는 오버헤드 때문에 제한된다.

다-대-다

여러개의 사용자 수준 스레드를 그보다 작은 수 혹은, 같은 수의 커널 스레드로 매핑한다.

이상적이긴하나 하드웨어가 발전됨에 따라 굳이 사용하지않음

'CS' 카테고리의 다른 글

chapter05-2 세마포/교착상태  (0) 2023.05.05
chapter05. 프로세스 / 임계구역 /  (0) 2023.05.05
chapter03. 프로세스 개념 및 스케줄러  (0) 2023.01.13
chapter02.운영체제 구조 및 서비스  (0) 2023.01.12
chapter01.  (0) 2023.01.12