Blog For Me

[운영체제] 스레드(Thread)의 개념 본문

컴퓨터과학/운영체제

[운영체제] 스레드(Thread)의 개념

PureStack 2021. 10. 30. 00:56

스레드(Thread)란?

  • 프로세스 내에서 실행되는 프로그램 코드의 흐름을 의미하며, 프로세스 내 주소 공간이나 자원 공유 가능하다.

  • 한 개의 프로세스 내에서는 반드시 하나 이상의 스레드가 존재한다.

  • 스레드는 프로세스 내의 Code, Data, Heap 영역을 다른 스레드와 공유하고 Stack 영역은 따로 할당받는다.

  • 여러 스레드는 한 프로세스 내의 Code, Data, Heap 영역을 공유하지만, 프로세스 간에는 서로 메모리에 접근할 수 없다.

  • 스레드는 별도의 Register와 Stack을 가지고, 그 외의 다른 영역은 공유한다. 한 스레드가 프로세스 자원을 변경하면 다른 스레드도 그 변경 결과를 가져올 수 있다.

스레드가 필요한 이유

여러개의 작업 단위로 구성된 프로그램에서 요청을 동시에 처리하기 위함이다.

예를 들어, 워드 프로세스에서 사용자로부터 키보드 입력 받는 스레드, 그래픽이나 UI를 그리는 스레드, 그리고 문법 오류 체크하는 스레드 등 워드 프로세스 내에서 여러 요청들을 동시에 처리해야 하는데, 이때 스레드가 필요하다.


스레드의 이점

  1. 응답성(Responsiveness) : 다른 스레드의 실행 시간이 길거나 입출력 요청으로 인하 block 되더라도 계속 실행되는 것을 허용한다.

  2. 자원 공유(Resource sharing) : 프로세스 내 자원(데이터, 코드, 힙)을 공유한다.

  3. 경제성(Economy): 프로세스 생성을 위한 메모리와 자원 할당, 프로세스 간 문맥 교환은 비용이 많이 들고 오버헤드가 발생하는 반면에, thread는 프로세스의 자원을 공유하고 있으므로 스레드 생성이나 문맥 교환 시에 더 경제적이다.

  4. 확장성(Scalability) : 멀티 프로세서 구조에서는 스레드들이 각자 다른 프로세서 위에서 병렬적으로 실행되기 때문에, 다중 CPU 환경에서 병렬성이 크게 증대된다.


스레드가 경량 프로세스(Light Weight Process)라 불리는 이유

  1. 프로세스 생성(Process fork)에 비해 스레드의 생성 시간이 더 빠르기 때문이다.
  2. 스레드 간에 프로세스 자원을 공유할 수 있기 때문이다.
  3. 스레드 간에 통신이 용이하기 때문이다.
Comments