DAY 4 스레드의 개념

스레드의 개념

; 제어만 프로세스를 특징짓는 자원 및 제어와 분리되는 실행 단위.

; 프로세스는 하나 이상의 스레드로 나눌 수 있습니다.

; 프로세스 직접 실행 정보를 제외한 프로세스 관리 정보 공유

; 다른 프로시저 호출, 또 다른 실행 이력(별도의 스택 필요)

; 메모리는 관련 리소스와 공유할 수 있으므로 데이터가 손상되거나 스레드의 비정상적인 동작을 고려하십시오.


경량 프로세스(LWP)

; = 스레드

; 일부 프로세스 속성을 포함


헤비웨이트 프로세스(HWP)

; 프로세스당 하나의 스레드가 있는 전통적인 경우

** 동일한 프로세스의 스레드는 동일한 주소 공간을 공유합니다.

**동일한 프로세스의 여러 스레드는 코드 영역, 데이터 영역 및 운영 체제 리소스를 공유합니다.

ex) 파일 열기, 시그널

** 프로세스에 여러 제어 스레드가 있는 경우 프로세스는 동시에 여러 작업을 실행할 수 있습니다.


스레드가 병렬로 실행

; 프로세스 내에 포함된 스레드는 공통 목표를 달성하기 위해 병렬로 실행됩니다.

; 하나의 프로세스를 사용하여 프로그램의 다른 부분을 다른 프로세서에서 동시에 실행


스레드 병렬 처리의 이점

– 사용자 응답성 향상

– 프로세스 리소스 및 메모리 공유 가능

– 좋은 경제

– 다중 처리를 통한 성능 및 효율성 향상



단일 스레드

; 전통적으로 각 프로세스는 하나의 스레드를 실행합니다.

스레드의 개념이 명확하지 않음

예) DOS


멀티스레딩

; 프로그램을 실행 단위로 분할한다는 점에서,

멀티프로세싱(multiprocessing)과 의미가 비슷하다.

** 실행 환경 정보는 쓰레드별로 독립적이지만 서로 많이 공유하기 때문에

프로세스와 동일한 프로세스의 스레드에 프로세서를 할당하거나

스레드 간의 컨텍스트 전환이 더 경제적입니다.


스레드 사용 예

; 현재 운영 체제의 대부분의 소프트웨어 패키지는 멀티스레딩을 지원합니다.

; 웹 브라우저 스레드 사용

– 이미지와 텍스트를 표시하는 스레드 1개

– 네트워크에서 데이터를 읽는 1개의 스레드

; 워드 프로세서에서 스레드를 사용하는 예

– 그래프를 표시하는 스레드 1개

– 맞춤법 및 문법 검사를 위한 스레드 1개

++ 웹 서버

; 단일 스레드 웹 서버

– 고객이 요청한 서비스가 완료될 때까지

다른 고객이 요청한 서비스를 기다려야 함

; 다중 프로세스 웹 서버

– 스레드가 일반화되기 전에 사용되어 새 프로세스를 생성합니다.

추가 클라이언트 요청 생성 및 처리

; 다중 스레드 웹 서버

– 프로세스에 비해 오버헤드가 적은 쓰레드 생성

동시에 여러 클라이언트에 서비스 제공

– 코어에서 실행되는 여러 스레드

– 각 스레드는 장치 관리 또는 인터럽트 처리와 같은 특정 작업을 수행합니다.


멀티스레드 프로그램의 장점

; 반응성

– 대화형 애플리케이션을 위한 멀티스레딩은 하나의 스레드가 일시적으로 차단되도록 허용합니다.

다른 스레드가 계속 실행되도록 놔두기 -> 사용자 응답성 향상

; 자원 공유

– 단일 프로세스에 속한 여러 스레드가 메모리와 같은 리소스 공유

; 경제

– 스레드는 소유 프로세스의 리소스를 공유합니다.

스레드를 만들고 컨텍스트를 교환하는 것이 더 경제적입니다.

; 확장성 ~ 멀티프로세서 아키텍처 활용

– 멀티프로세서(멀티코어) 시스템에서 쓰레드는

다른 프로세서(코어)에서 병렬로 실행 가능


다중 스레드 모델

; 사용자 스레드

– 사용자 수준 스레딩 라이브러리로 제작

– 커널 위에서 실행되기 때문에 커널 지원 없이도 관리 가능

예) POSIX Pthreads, Win32 스레드, Java 스레드


; 커널 스레드

– 운영 체제 커널에서 직접 지원 및 관리

예) Windows XP/2000, Solaris, Linux, Tru64 Unix, Mac OS X


**운영 체제 커널은 커널 수준에서 스레드를 지원하고 관리합니다.

**사용자 스레드는 프로그래머에게 표시되지만 커널에는 알려지지 않은 스레드입니다.

** 일반적으로 사용자 스레드는 커널 개입이 필요하지 않으므로 커널 스레드보다 빠르게 생성 및 관리할 수 있습니다.


사용자 스레드와 커널 스레드 간의 관계

다대일 모델

; 여러 사용자 스레드가 하나의 커널 스레드에 매핑됨

; 한 번에 하나의 스레드만 코어에 액세스할 수 있으므로

여러 프로세서에서 실행되는 여러 스레드는 병렬로 실행할 수 없습니다.

예) Solaris 스레드 라이브러리, GNU Portable Threads

일대일 모델

; 하나의 사용자 스레드는 하나의 커널 스레드에 매핑됩니다.

; 다대일 모델보다 더 많은 병렬성을 제공합니다.

다대다 모델

; 여러 사용자 스레드가 여러 커널 스레드에 매핑됨

예) Solaris 9 이하, ThreadFiber 패키지가 있는 Windows NT/2000


스레드 상태 변경

; 핸들러와 함께 사용, 항상 하나만

; 프로세스의 쓰레드가 순차적으로 실행되어 쓰레드의 정보(레지스터, 스택)를 저장

; 프로세스 생성 및 종료보다 오버헤드가 훨씬 적습니다.

; 실행 중인 스레드가 대기 상태가 되면 다른 스레드가 실행될 수 있습니다(서로 독립적이지 않음).


스레드 제어 블록(=TCB)

; 정보 저장

; 프로세스 제어 블록은 스레드 제어 블록의 목록입니다.

; 크로스 스레드 보호 없음

** TCB 내용

; 작동 상태

– 프로세서 레지스터, 프로그램 카운터, 스택 포인터

; 일정 정보

– 상태(실행 중, 준비됨, 대기 중), 우선 순위, 프로세서 시간

;계정 정보


질문

프로세스와 스레드의 차이점은 무엇입니까?

프로세스는 리소스와 스레드로 구성된 실행 프로그램입니다.

프로세스에는 하나 이상의 스레드가 있습니다.

스레드는 가벼운 프로세스입니다.

그 과정에서 실제 작업을 수행하고 있습니다.