Thread   스레드, 쓰레드

(2022-08-26)

단일 스레드, Multi-Thread, 멀티 스레드, Multithreading, 멀티 스레딩


1. 스레드 (Thread)

  ㅇ 영어 뜻 자체로는, 이야기 흐름 또는 줄기 또는 실(☞ 섬유) 등을 말함

  ㅇ 하나의 프로세스 내에서, 
     - 더 작은 단위들로 각각 독립적으로 실행되며, 각각 제어가 가능한 흐름 
     - 일명, Excecution Context(실행 컨텍스트) 또는 Lightweigt(경량급) 프로세스라고 함


2. 프로세스와 스레드 차이프로세스
     - 완전한 하나의 프로그램이 실행되는 것
     - 예를들어, 유닉스에서 볼때, fork()를 통해 생성되는 프로세스는,
        . 원래의 프로세스와 똑같은 변수코드 등 여러 면에서 똑같은 복사본임
     - 따라서, 부모와 똑같은 자식을 생성하기 위해서는, 그만큼 많은 자원이 요구됨

  ㅇ 스레드
     - 스레드는 프로세스와는 달리,
        . (수행 방식)  부모 프로세스 전체의 복사본을 만들지 않고,
           .. 필요한 코드 덩어리 만을 생성하여 동시에 수행 
        . (동일 생성, 독립 실행)  해당 스레드들 모두가, 
           .. 동일 프로그램으로 생성되나, 
           .. 서로 독립되어 실행 됨
        . (공유)  해당 스레드들 모두가, 주요 메모리 공간을 함께 공유 함 
     - 따라서, 부모 스레드가 갖고 있는 모든 데이터를 완전하게 접근할 수 있기 때문에,
        . 효율적이고 메모리 제약이 있는 시스템에 널리 사용

  ※ 한편, 
     - 과거 유닉스 시스템은, 각 프로세스가 단 하나의 스레드로 만 구성됨
     - 현대적 운영체제 대부분은, 한 프로세스가 다중 스레드를 포함 지원


3. 스레드 개요

  ㅇ 스레드는, CPU 이용의 기본 단위
     - 동일 프로세스에 속하는 스레드는, 코드데이터프로세스 자원을 공유함

  ㅇ 스레드의 식별
     - 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택 등

  ㅇ 스레드가 공유하는 것
     - 각 스레드는 같은 프로세스에 속한 다른 스레드들과 함께,
     - 코드, 데이터 섹션, 열린 파일 등을 공유하게 됨


4. 멀티 타스킹, 멀티 스레드 비교멀티 타스킹은, 
     - 운영체제의 입장에서 동시에 여러 프로세스를 수행하는 것
     - 즉, 운영체제가 관리의 주체 임

  ㅇ 멀티 스레드는, 
     - 하나의 응용 프로그램이, 독립적인 단일 프로세스로 구현되나,
        . 이것이, 동시에 다수의 실행 흐름을 만들어 냄

     - 또한, 하나의 응용 프로그램이 직접 스레드 생성 및 파괴를 관리하게 됨

     - 멀티 스레드의 각 스레드 마다 제각각 시스템 자원을 사용 가능

     - 유닉스/리눅스에서, 멀티 스레드 프로세스의 경우에,
        . 동일 프로그램으로 여러 스레드에서 동시에 실행 함
        . 모든 스레드가, 같은 전역 변수/힙 메모리를 공유 함
        . 또한, 프로세스 ID, 오픈 파일 디스크립터, 시그널 속성, 현재 작업 디렉토리,
                자원 한도 등의 속성도 공유 함
        . 그러나, 각 스레드는, 지역 변수를 담은 개별 스택을 갖게 됨

  ※ 한편, 단일 스레드 환경은, 하나의 응용 프로그램이 단 하나의 실행 흐름 만 만듬
     - 즉, 한 번에 한가지 일 만 수행 가능
        . 이 경우, 인터럽트비동기적 처리는 어려워짐


4. 스레드 기반의 아키텍처

  ㅇ 한때, MS社의 제품군인 윈도우 NT, 2000, XP 등에서,
     - UNIX에서와는 달리 스레드 기반의 아키텍쳐를 갖음
     - 이는 단일 프로세스 하에 다중 스레드로 구현

  ㅇ 스레드 기반의 아키텍처의 장점으로는,
     - 한 개의 프로세스의 모든 스레드들은 같은 프로세스 메모리 공간을 공유함
     - 따라서, 응용 프로그램들의 메모리 분배가 효율적
     - 유닉스 같은 운영체제에서의 프로세스 간의 메모리 분배 관리기법이 불필요

  ㅇ 스레드의 단점
     - 어느 한 스레드가 제어상에 문제가 발생하면, 타 스레드 메모리 공간을 덮어쓸 수도 있기
       때문에 안정성에 다소 취약



Copyrightⓒ written by 차재복 (Cha Jae Bok)
"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"