스레드의 개념
; 제어만 프로세스를 특징짓는 자원 및 제어와 분리되는 실행 단위.
; 프로세스는 하나 이상의 스레드로 나눌 수 있습니다.
; 프로세스 직접 실행 정보를 제외한 프로세스 관리 정보 공유
; 다른 프로시저 호출, 또 다른 실행 이력(별도의 스택 필요)
; 메모리는 관련 리소스와 공유할 수 있으므로 데이터가 손상되거나 스레드의 비정상적인 동작을 고려하십시오.
경량 프로세스(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 내용
; 작동 상태
– 프로세서 레지스터, 프로그램 카운터, 스택 포인터
; 일정 정보
– 상태(실행 중, 준비됨, 대기 중), 우선 순위, 프로세서 시간
;계정 정보
질문
프로세스와 스레드의 차이점은 무엇입니까?
프로세스는 리소스와 스레드로 구성된 실행 프로그램입니다.
프로세스에는 하나 이상의 스레드가 있습니다.
스레드는 가벼운 프로세스입니다.
그 과정에서 실제 작업을 수행하고 있습니다.