정의
Thread is a basic unit of CPU utilization.
CPU, 프로세서 사용의 기본 단위를 말한다.
왜 프로세스가 아닌 스레드가 동작하는 최소단위인가?
동일한 목적을 가진 프로세스가 여러 개가 된다면
code, data stack을 따로 만들어야한다.
하지만 같은 일을 한다면 필요한 데이터를 굳이 2번 만들필요는 없다.
(같은 일을 처리하기 위해 동일한 프로그램을 여러 개의 프로세스로 만들게 되면, 그만큼 메모리를 차지하게 되고 PCB 도 각각 만들어야되고 프로세스간 통신을 위해 비용이 커진다.)
데이터의 각 부분만 다르게 각자 읽어서 수행하는 것이 더 효율적이라는 말이다.
CPU 수행에 관련된 부분은 나누되 나머지 메모리, 자원같은 것들을 공유하며 존재한다.
**Stack 영역을 스레드 간에서 구분해서 사용함.
스레드 간의 공유하는 부분
code section, data section, OS resource
구성
Thread = Program Counter + register set + stack space
때문에 위와 같이 같은 일을 한다면 Code, Data는 공통으로 가지되
각 스레드가 Program Counter를 각각 가지게되고 일은 따로하면서
필요한 정보는 공유하는 그런 것을 말한다.
다중 스레딩, 멀티 스레드란? Multi-Thread?
다수의 스레드를 이용하여 하나의 프로그램을 동시에 처리하는 것으로,
하나의 프로그램을 위하여 다수의 실행 단위(스레드, Thread)를 이용한다는 점에서
다중 프로세싱과, Multi-Process와 비슷한 의미다.
그러나 다중 프로세싱에서와는 달리 하나의 프로세스 자체에 다수의 실행 단위(Thread)들이 존재하여
작업의 수행에 필요한 자원들을 공유하는 것이므로 자원의 생성과 관리가 중복되는 것을 막는다.
이러한 자원 공유는 하나의 프로세스 내에서 뿐만 아니라
여러 개의 서로 다른 프로세스들 사이에서도 공유가 가능하다.
또한 하나의 프로그램을 다중 스레딩 기법을 이용하여 수행하면
각 스레드는 서로 독립적으로 동시에 수행 가능하여
다중 프로세서 시스템에서 뿐만 아니라 단일 프로세서 시스템이어도 다중 처리가 가능하다.
(비동기적 수행을 뜻한다.)
스레드의 장점
1. 응답성
하나의 서버스레드가 blocked 상태인 동안(I/O를 기다리거나 메모리 적재를 기다리는 중) 에서도
다른 스레드는 running될 수 있어 빠른 응답성을 가질 수 있다.
즉, 크롬같은 웹페이지에서 렉이 걸릴 때 이미지보다 글이 먼저 불러와지는 것과 비슷하다.
그림을 가져오는 것은 blocked이지만 text를 가져오는 작업은 따로 진행되기 때문에
글이라도 먼저 볼 수 있는 것이다.
2. 자원 공유
n개의 스레드는 프로세스 내의 각종 자원들을 공유하여 동작한다.
** 메모리 공간, 시스템 자원의 효율성 증가
3. 경제적
프로세스를 생성하는 것보다 스레드를 생성하는 것이 더욱 쉽다.
프로세스 간의 CPU swtiching은 스레드 간의 CPU switching보다 오버헤드가 크다.
** context switching시 비용이 적음
4. 병렬성(Multi Processor, CPU가 여러개 일 때)
동일한 일을 수행하는 다중 스레드가 협력해서 높은 처리율과 성능향상을 기대할 수 있다.
이 외에도
프로세스 간의 통신의 Kernel의 도움을 받으며 이루어지는 것과는 달리
커널의 도움없이 상호간에 통신이 가능하다.
**Data, Heap 영역을 이용해 데이터를 주고 받으므로 스레드간 통신이 간단함
하지만 멀티 스레딩을 위해서는신경써주어야할 것들이 생긴다.
1. 서로 다른 스레드가 Stack을 제외한 메모리 공간을 공유하기 때문에 동기화 문제가 발생할 수 있음
2. 하나의 스레드에 문제가 생기면 프로세스 전체가 영향을 받음
3. 주의 깊은 설계가 필요하며 디버깅이 까다로움 ( 프로그래머의 역량 )
그리고 성능 좋은 실행을 위해 무조건 멀티스레딩을 하는 것이 좋나? 라고 생각할 수 있다.
스레드를 활용하면 자원의 효율성이 증가하기도 하지만 스레드 간의 자원 공유는 전역 변수를 이용하므로 동기화 문제가 발생 할 수 있으므로 프로그래머의 주의가 필요하다.
또한 멀티스레딩이 비동기적 수행으로 성능향상을 추구한다고 보았을 때
실제로 수행하고자 하는 것이 무엇이냐에 따라
멀티스레딩을 하느냐 마느냐를 생각하는 것이 좋다.
[CS Interview] - (A)Synchronous 그리고 (Non)-Blocking
[컴퓨터(Computer Science)/시스템 프로그래밍(System Programming)] - 멀티스레드 환경에서의 동기화(Synchronization)
[컴퓨터(Computer Science)/운영체제(Operation System)] - 다중 스레드 모델, Multithreading Models
[컴퓨터(Computer Science)/운영체제(Operation System)] - 스레드,Thread [운영체제]
'CS Interview' 카테고리의 다른 글
절차지향 프로그래밍 vs 객체지향 프로그래밍 비교 (0) | 2021.08.25 |
---|---|
스택과 힙 메모리 영역, Stack Heap Memory (0) | 2021.08.25 |
Scheduler & Algorithm, 스케줄러가 하는 일, 스케줄링 알고리즘 (0) | 2021.06.28 |
Process, 프로세스란? (0) | 2021.06.28 |
Virtual Memory, 가상메모리란? (0) | 2021.06.28 |