2021. 7. 7. 15:24ㆍ운영체제
프로세스와 스레드의 차이는 무엇일까?
프로세스란, 실행 중인 프로그램이라고 할 수 있다.
사용자가 작성한 프로그램이 운영체제로부터
메모리 등의 (1) 자원을 할당 받고, 그 (2) 자원을 제어하여 작업을 수행하는 것이다.
여기서 (2) 자원을 제어하여 작업을 수행 을 맡는 친구가 바로 스레드이다.
스레드란, 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다.
즉, 프로세서 활용의 기본 단위라고 할 수도 있다!
스레드는 각각의 제어 정보가 있고, 각각의 작업을 수행하지만
(1) 프로세스가 할당받은 자원은 공유하게 된다
이러한 측면에서 Light Weight Process (LWP) 라고도 한다.
또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 하는데,
스레드가 여러 개라는 것은, 프로세서의 코어를 여러 개 사용할 수 있다는 것.
코어는 프로세서에 물리적으로 존재하는 연산부. 뇌의 개수라고 생각할 수 있다.
스레드는, OS에서 인식하고 작동하는 작업 단위이다.
기본적으로는, 1개의 코어 = 운영체제에서의 1개의 스레드로 생각하면 된다.
1개의 코어를 OS 가 2개의 스레드로 인식하도록 하는 Hyper Threading 이라는 기술이 있다.
즉, 스레드 = 논리적 코어 !
스레드의 구성
- Thread ID
- Register set - Program counter, Stack pointer 등 다양한 상태 정보
- Stack - 각 스레드의 작업 영역, local data
위와 같은 제어 요소 외에,
프로그램 코드, 전역 데이터 등 자원은 프로세스 내 다른 스레드와 공유하는 형태이다.
스레드의 장점
먼저, 자원을 공유하여 효율성과 경제성이 증가한다 !
프로세스 단위에서는, 한 자원을 두 프로세스가 사용할 경우 번갈아 가며 접근해야 하고,
Context switching 이 계속 일어난다. 이는 무거운 연산이고, 오버헤드가 크게 발생하게 된다.
스레드는 한 자원을 공유하므로, 효율적으로 동작할 수 있다.
스레드의 경우에도 물론 Context switching 이 발생하지만,
그 비용이 상당히 적다. 또한 프로세스 생성으로 인한 오버헤드도 감소한다.
https://stackoverflow.com/questions/5440128/thread-context-switch-vs-process-context-switch
위에서 언급한, 멀티스레드를 활용한 병렬처리를 통해 성능을 향상 시킬 수 있으며,
사용자 응답성 또한 제고된다.
이게 무슨 말인고, 하면
게임을 하는 상황을 생각해보자.
화면출력
^
스피커 < process > 키보드
현재, 프로세스는 화면을 출력하는 running state 에 있다.
이 상태에서 키보드 입력 등, I/O 가 발생하면
프로세스는 에서 block state 로 내려간다.
화면을 출력하던 작업이 중단되는 것이다 !
다시 ready state 를 거쳐 running state 로 돌아가기까지,
잠시 멈춘 듯한 현상이 발생한다.
게임이 멀티스레드 프로세스라면 이러한 문제를 해결할 수 있다.
3 개의 작업을 3 스레드로 각각 처리하면,
일부 스레드가 block 된다던가 지연되더라도 다른 스레드는 계속해서 작업이 가능하기 때문에,
화면 멈춤과 같은 현상이 없어질 것이고
사용자 입장에서의 응답성이 좋아진다는 것이다!
'운영체제' 카테고리의 다른 글
Kernel Thread, User Thread (0) | 2021.07.08 |
---|---|
Interrupt 와 Context Switching (0) | 2021.07.05 |
Process state, 프로세스의 상태 (0) | 2021.07.03 |
PCB (Process Control Block) 이란? (0) | 2021.07.02 |
메모리 계층구조, Cache Memory 의 작동 방식 (0) | 2021.07.02 |