상세 컨텐츠

본문 제목

11.1 쓰레드란 무엇인가?

Programming/Windows System

by RACC8N 2020. 4. 19. 11:35

본문

하나의 프로그램 내에서 둘 이상의 실행 흐름을 두기 위해서, 모든 것을 독립시키는 구조(Process)로 갈 필요는 없다.

> 쓰레드의 등장

 

프로세스는 완전히 독립된 두 개의 프로그램 실행을 위해서 사용된다.

> 쓰레드는 하나의 프로그램 내에서 둘 이상의 프로그램 흐름을 만들어 내기 위해서 디자인된 것이다.

> 쓰레드간에는 공유하는 상태 정보들이 있다. 이것이 쓰레드의 컨텍스트 스위칭을 빠리게 하는 요인이 된다.

 

● 쓰레드는 하나의 프로그램 내에서 여러 개의 실행 흐름을 두기 위한 모델이다.

● 쓰레드는 프로세스처럼 완벽히 독립적인 구조가 아니다. 쓰레드들 사이에는 공유하는 요소들이 있다.

● 쓰레드는 공유하는 요소가 있는 관계로 컨텍스트 스위칭에 걸리는 시간이 프로세스보다 짧다.

 

메모리 구조 관점에서 본 프로세스와 쓰레드

프로세스는 모두 독립적인 메모리 구조를 갖지만, 쓰레드는 쓰레드만을 위한 스택을 생성할 뿐 그 외의 영역은 프로세스와 공유한다.

 

쓰레드의 특성

1. 쓰레드마다 스택을 독립적으로 할당해 준다

- 실행 흐름의 추가를 위한 최소 조건이 독립된 스택의 제공이다.

 

2. 코드 영역을 공유한다

- 프로세스의 경우 100% 독립된 구조이기 때문에 위와같이 Code영역을 공유하지 않는다.

 

- 쓰레드는 Code영역을 공유하기 때문에 쓰레드의 main함수가 Code 영역에 있는 함수를 사용할 수 있다.

 

3. 데이터 영역과 힙을 공유한다

- 쓰레드간에 힙과 데이터 영역을 공유하기 때문에 쓰레드 A가 접근할 수 있는 힙과 데이터 영역은 쓰레드 B도 접근할 수 있다. 따라서 IPC가 필요 없어졌다. 

 

*** Windows에서의 프로세스와 쓰레드 ***

Windows입장에서 프로세스는 단순히 쓰레드를 담는 상자에 지나지 않는다.

> 실제 프로그램의 흐름을 형성하는 것은 쓰레드이다.

 

Windows 운영체제에 있어서 프로세스는 상태(Running, Ready, Blocked)를 지니지 않는다.

> 상태를 지니는건 프로세스가 아니라 쓰레드이다.

> 스케줄러가 실행의 단위로 선택하는 것도 프로세스가 아닌 쓰레드이다.

> Windows에 있어서 실행의 중심에 있는 것은 프로세스가 아닌 쓰레드이다.

프로세스 A의 쓰레드가 실행되는 도중에 프로세스 B의 쓰레드로 실행을 옮기는 과정은 프로세스 컨텍스트 스위칭과 다를게 없다.

 

Windows에서도 프로세스 컨텍스트 스위칭이 존재한다고 한다. 이는 서로 다른 프로세스 내에 존재하는 쓰레드들 사이에서 발생하는 컨텍스트 스위칭을 의미한다.

 

Windows에서는 쓰레드가 존재하지 않는 프로세스란 있을 수가 없다.

 

프로세스 내에서 기본적으로 생성되는 쓰레드에 의해 Main 함수가 실행되며 이를 Main쓰레드라 부른다.(Main함수를 호출하는 쓰레드)

 

관련글 더보기

댓글 영역