📖스레드란
- 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위이다.
- 각 스레드(Thread)는 Thread ID, 프로그램 카운터,레지스터 집합, 스택으로 구성되어 있다.
- 같은 프로세스에 속하는 스레드는 서로 코드, 데이터 섹션, Heap, 열린파일이나 신호와 같은 운영체제 자원들을 공유한다.
📖스레드가 필요한 이유
- 웹서버는 수많은 클라이언트로부터 요청을 받는다.만약 단일 프로세스로 작동한다면 ,자신의 단일 프로세스로 한번에 하나의 클라이언트만을 서비스 할 수 있게되어 오랫동안 기다려야한다.
📖멀티태스킹과 멀티스레드
👉 멀티 태스킹
- 멀티태스킹은 하나의 운영체제 언에서 여러 프로세스가 실행되는것을 의미한다.
- 멀티태스킹은 여러 프로세스가 동시에 실행되는 것처럼 보이지만 자세한 원리를 알아보면 그렇지 않다.
👉멀티스레드
- 대부분의 프로그램은 하나의 프로세스안에 여러개의 스레드로 구성해서 처리하는 방식을 사용한다.이를 멀티스레딩이라 한다.
- 자원을 공유해서 효과적이고, 통신간 비용이 적다.
📖멀티스레드 장단점
🤨멀티스레드 장점
- 시스템 자원 소모 감소 (자원의 효율성 증대) :프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리 할 수 있다.
- 시스템 처리량 증가(처리 비용 감소) : 스레드 사이의 작업량이 작아 Context Switching이 빠르다.
- 간단한 통신 방법으로 인한 프로그램 응답 시간 단축: 스레드는 프로세스 내의 Stack영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적다.
😟멀티스레드 단점
- 스레드 하나가 프로세스 내부 자원을 망쳐버리면 모든 프로세스가 종료될 수 있다.
- 자원을 공유하기 때문에 동기화 문제가 발생할 수 밖에 없다.
👉동기화 문제(Synchronization Issue)는 멀티스레드를 사용하면 각각의 스레드 중에 어떤 것이 우선 순서로 실행되는지 알 수 없다.
만약 A 스레드가 어떤 자원을 사용하다가 B 스레드로 제어권이 넘어간 후 B 스레드가 해당 자원을 수정했을 때, 다시 제어권을 받은
A스레드가 해당 자원에 접근하지 못하거나 바뀐 자원에 접근하게 되는 오류가 발생할 수 있다.그러므로 프로그래머가 직접 동기화
문제에 대응할 수 있어야 한다.
💻마무리
스레드는 프로세스 안에 포함되어 있기 때문에,프로세스와 개념의 법위부터가 다르다.
운영체제가 프로세스에게 Code/Data/Stack/Heap 메모리 영역을 할당해 주고 최소 작업 단위로 삼는 반면, 스레드는 프로세스 내에서 Stack 메모리 영역을 제외한 다른 메모리 영역을 같은 프로세스 내 다른 스레드와 공유한다.
멀티태스킹보다 멀티스레드가 자원을 아낄 수 있게 된다. 다만 스레드의 스케줄링은 운영체제가 처리하지 않기 때문에 프로그래머가 직접 동기화 문제에 대응할 수 있어야 한다.
References
- https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
- https://velog.io/@ckstn0777/OS-스레드
- https://velog.io/@raejoonee/프로세스와-스레드의-차이
'Dev > ComputerScience' 카테고리의 다른 글
[CS]인터럽트(Interrupt) (0) | 2021.06.13 |
---|---|
[CS]Context Switching(컨택스트 스위칭) (0) | 2021.06.13 |