스레드

꿀떡냠·2024년 5월 16일

스레드의 개념

스레드의 정의

  • CPU가 처리하는 작업의 단위이다.
  • 운영체제의 입장의 작업 단위는 프로세스, CPU 입장의 작업 단위는 스레드
  • 운영체제의 입장의 스레드는 CPU에 작업 요청하는 실행 단위

일반적으로 작은 단위의 일(operation)이 모여 하나의 작업이 된다.
작업을 상대 적인 크기순으로 나열하면 처리(job) > 프로세스(task) > 스레드 (operation)이 된다. 여러 개의 스레드가 모여서 프로세스를 이루고 여러 개의 프로세스가 모여 처리가 된다.

프로세스와 스레드 차이

  • 프로세스는 약하게 연결되있지만 스레드는 강하게 연결되어 있다.
  • 각각의 프로세스는 서로에게 큰 영향을 끼치지않는다.
  • 스레드는 실행 순서 및 실행 결과가 다른 스레드에 영향을 미친다.
  • 스레드는 프로세스 내부에서 서로 강하게 연결되어 있다.

멀티태스크와 멀티스레드

  • 멀티 태스크

    • 멀티 태스크는 서로 독립적으로 작동한다.
    • 예를들어 워드프로세서가 비정상적으로 종료되어도 프린터 스풀러는 정상적으로 작동한다.
    • 서로 독립적인 프로세스가 데이터를 주고받을 때는 프로세스 간 통신(IPC : Inter Process Communication)을 이용한다.
  • 멀티 스레드
    - 프로세스내의 스레드들이 동시에 작업을 하는것을 멀티 스레드 라고 한다.

    • 예를 들어 워드 프로세서 프로세스는 문서편집, 문서 입출력, 맞춤법 검사, 그림판 같은 스레드들이 동시에 작업을 한다.
    • 프로세스가 종료되면 프로세스 내의 스레드도 강제 종료 된다.
    • 멀티스레드는 변수나 파일 등을 공유하고 전역 변수나 함수 호출 등의 방법으로 스레드 간 통신을 한다.

스레드 관련 용어

  • 멀티 스레드
    • 프로세스 내 작업을 여러 개의 스레드로 분할함으로써 작업의 부담을 줄이는 프로세스 운영기법
  • 멀티 태스킹
    - 운영 체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법
    • 시분할 시스템
    • 시분할 시스템에서 운영체제가 CPU에게 전달하는 작업은 프로세스가 아니라 스레드다.
  • 멀티 프로세싱
    - CPU를 여러개 사용하여 여럭 개의 스레드를 동시에 처리하는 작업환경을 말한다.
    • 하나의 CPU내 여러 개의 코어에 스레드를 배정하여 동시에 작동하는 것도 멀티 프로세싱이다.
  • CPU 멀티 스레드
    - 운영체제가 소프트웨어적으로 프로세스를 작은 단위의 스레드로 분할하여 운영하는 기법을 멀티스레드, 하나의 CPU에서 여러 스레드를 동시에 처리하는 것은 CPU 멀티 스레드라고 부른다.

멀티스레드의 구조와 예

멀티스레드의 구조

  • 멀티스레드는 비슷한 일을 하는 2개의 프로세스를 만드는 대신 코드, 데이터 등을 공유하면서 여러 개의 일을 하나의 프로세스 내에서 하도록한다.
  • 정적인 영역은 프로세스가 실행 되는 동안 바뀌지 않는 영역으로 스레드들이 공유하는 값이다.
  • 동적인 영역은 스레드가 작업을 하면서 값이 바뀌거나 생성되거나 사라지는 영역이다 (레지스터 값, 스택, 힙)
  • 자원의 낭비를 막고 효율성을 향상시킬 수 있다.
  • 스레드는 가벼운 프로세스(LWP: Light Weight Process)라고 부르며, 반대로 스레드가 1개인 일반 프로세스는 무거운 프로세스 (HWP: Heavy Weight Process)라고 불린다.

멀티스레드의 장단점

멀티스레드의 장점

  • 프로세스 내 공유가 가능한 부분을 제외하고 실행과 관련된 부분을 스레드로 나누어 관리하면 중복 사용을 피함으로 낭비를 막을 수 있다.
  • 하나의 프로세스에서 여러 스레드를 사용하면 작업의 효율을 높일 수 있다.
  1. 응답성 향상 : 한 스레드가 입출력으로 인해 작업이 진행되지 않아도 다른 스레드가 작업을 계속하여 사용자의 작업요구에 빨리 응답할 수 있다.
  2. 자원 공유 : 한 프로세스 내에서 독립적인 스레드를 생성하면 프로세스가 가진 자원을 모든 스레드가 공유하게 되어 작업을 원할하게 진행 할 수 있다.
  3. 효율성 향상 : 여러 개의 프로세스를 생성할 필요가 없어 불필요한 자원의 중복을 막음으로써 시스템 효율이 향상된다.
  4. 다중 CPU 지원 : 2개 이상의 CPU를 가진 컴퓨터에서 멀티스레드를 사용하면 다중 CPU가 멀티스레드를 동시에 처리하여 CPU 사용량이 증가하고 프로세스의 처리 시간이 단축된다.

멜티스레드의 단점

  • 멜티스레드는 자원을 공유하기 떄문에 한 스레드에 문제가 생기면 전체 프로세스에 영향을 미친다.
  • 현대에는 메모리가 넉넉하고 멀티 코어 CPU를 지원하면서 다른 스레드가 영향받는 것을 최소화하기 위해 낭비 요소가 있더라도 멀티태스킹을 이용하는 경우가 많다.

멀티스레드 모델

  • 프로세스가 커널 프로세스와 사용자 프로세스로 구분되는 것처럼 스레드도 커널 스레드와 사용자 스레드로 나뉜다.
    • 커널 스레드 : 커널이 직접 생성하고 관리하는 스레드
    • 사용자 스레드 : 라이브러리에 의해 구현된 일반적인 스레드
  • 커널 스레드와 사용자 스레드의 대응방식은 1 to N모델, 1 to 1 모델, M to N 모델로 구분된다.

사용자 스레드 (1 to N모델)

  • 커널이 멀티스레드를 지원하지 않은 초기의 스레드 시스템에서 사용되었다.
  • 사용자 스레드는 사용자 레벨에서 라이브러리를 사용하여 스레드를 구현한다.
  • 사용자 스레드 라이브러리는 커널이 지원하는 스케줄링이나 동기화 같은 기능을 대신 구현해 준다.
  • 커널 입장에서는 사용자 스레드 1개가 1개의 프로세스처럼 느껴진다.
  • 사용자 프로세스 내에 여러 개의 스레드가 존재하지만 커널의 스레드 하나와 연결되기 때문에 1 to N 모델이라고 한다.
  • 장점
    • 라이브러리가 직접 스케줄링하고 작업에 필요한 정보를 처리하기 때문에 커널에서 문맥 교환이 필요없다.
  • 단점
    • 여러개의 스레드가 하나의 커널 스레드와 연결되기 때문에 커널 스레드가 입출력 작업을 위해 대기 상태에 들어가면 모든 사용자 스레드가 같이 대기하게 된다.
    • 커널의 입장에서는 하나의 프로세스이기 때문에 일부 스레드만 대기 상태로 보낼 수가 없다.
    • 한 프로세스의 타임 슬라이스를 여러개의 스레드가 공유하면서 멀티코어 환경에서 병렬로 실행될 수 없다. (멀티 스레드를 지원하는 커널의 경우는 가능하다.)
    • 보안에 취약하다. 공유변수를 보호르르 커널이 아닌 라이브러리에서 구현하기 때문이다.

커널 스레드(1 to 1 모델)

  • 커널 스레드는 커널이 멀티 스레드를 지원하는 방식이다.
  • 하나의 사용자 스레드가 하나의 커널 스레드와 연결된다.
  • 커널 스레드는 독립적으로 스케줄링되므로 특정 스레드가 대기 상태에 들어가도 다른 스레드는 작업을 계속 할 수 있다.
  • 커널이 제공하는 보호 기능을 사용 할 수 있다.
  • 장점
    • 하나의 스레드가 대기 상태에 있어도 다른 스레드는 작업을 계속할 수 있다.
    • 보안에 강하고 안정적으로 작동한다.
  • 단점
    • 문맥교환을 할 때 오버헤드 때문에 느리게 작동

멀티레벨 스레드 (M to N모델)

  • 하이브리드 스레드라고도 한다.
  • 사용자 스레드와 커널 스레드를 혼합한 방식이다.
  • 커널 스레드의 개수가 사용자 스레드보다 같거나 적다.
  • 대기 상태에 들어간 커널 스레드 대신 다른 스레드가 대신 작업하여 사용자 스레드보다 유연하게 작업을 처리할 수 있다.
  • 하지만 커널 스레드를 같이 사용하기 때문에 여전히 문맥교환 오버헤드 발생
  • 빠르게 움직여야하는 스레드는 사용자 스레드로, 안정적으로 움직여야하는 스레드는 커널 스레드로 작동한다.
profile
백엔드 개발자로 살아남기

0개의 댓글