컴퓨터과학/운영체제
[운영체제] 스레드(Thread)의 개념
PureStack
2021. 10. 30. 00:56
스레드(Thread)란?
- 프로세스 내에서 실행되는 프로그램 코드의 흐름을 의미하며, 프로세스 내 주소 공간이나 자원 공유 가능하다.
- 한 개의 프로세스 내에서는 반드시 하나 이상의 스레드가 존재한다.
![](https://user-images.githubusercontent.com/59963677/139459874-35fb45f1-a5b5-4a2f-97c9-11fdbcae5f06.png)
- 스레드는 프로세스 내의 Code, Data, Heap 영역을 다른 스레드와 공유하고 Stack 영역은 따로 할당받는다.
- 여러 스레드는 한 프로세스 내의 Code, Data, Heap 영역을 공유하지만, 프로세스 간에는 서로 메모리에 접근할 수 없다.
- 스레드는 별도의 Register와 Stack을 가지고, 그 외의 다른 영역은 공유한다. 한 스레드가 프로세스 자원을 변경하면 다른 스레드도 그 변경 결과를 가져올 수 있다.
스레드가 필요한 이유
여러개의 작업 단위로 구성된 프로그램에서 요청을 동시에 처리하기 위함이다.
예를 들어, 워드 프로세스에서 사용자로부터 키보드 입력 받는 스레드, 그래픽이나 UI를 그리는 스레드, 그리고 문법 오류 체크하는 스레드 등 워드 프로세스 내에서 여러 요청들을 동시에 처리해야 하는데, 이때 스레드가 필요하다.
스레드의 이점
- 응답성(Responsiveness) : 다른 스레드의 실행 시간이 길거나 입출력 요청으로 인하 block 되더라도 계속 실행되는 것을 허용한다.
- 자원 공유(Resource sharing) : 프로세스 내 자원(데이터, 코드, 힙)을 공유한다.
- 경제성(Economy): 프로세스 생성을 위한 메모리와 자원 할당, 프로세스 간 문맥 교환은 비용이 많이 들고 오버헤드가 발생하는 반면에, thread는 프로세스의 자원을 공유하고 있으므로 스레드 생성이나 문맥 교환 시에 더 경제적이다.
- 확장성(Scalability) : 멀티 프로세서 구조에서는 스레드들이 각자 다른 프로세서 위에서 병렬적으로 실행되기 때문에, 다중 CPU 환경에서 병렬성이 크게 증대된다.
스레드가 경량 프로세스(Light Weight Process)라 불리는 이유
- 프로세스 생성(Process fork)에 비해 스레드의 생성 시간이 더 빠르기 때문이다.
- 스레드 간에 프로세스 자원을 공유할 수 있기 때문이다.
- 스레드 간에 통신이 용이하기 때문이다.