하루에 한 문제

Thread(쓰레드)란? 본문

CS/운영체제

Thread(쓰레드)란?

dkwjdi 2021. 5. 17. 23:38

쓰레드의 사전적 의미는 "프로세스 내에서 실행되는 여러 흐름의 단위"이다.

  • 하나의 프로세스는 적어도 하나의 메인 스레드를 실행하고 있다.
  • 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
  • Stack을 분리한 이유는 Stack에는 함수의 호출 정보가 저장되는데, Stack을 공유하면 LIFO 구조에 의해 실행 순서가 복잡해지기 때문에 실행 흐름을 원활하게 만들기 위함이다.
  • 프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.
  • 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다. 반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
  • 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
  • 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다

 

워드를 예로 들어보자.

  • 워드에서 글자를 입력하는 동안 파일을 주기적으로 "자동저장"한다.
  • 또한 내용을 프린트에 "출력"하고
  • 입력하는 동안 자동으로 "맞춤법 검사"를 진행한다.
  • 사용자의 입력을 받는 동안 행하는 이 모든 작업들은 각각의 쓰레드에 의해서 이루어진 것이다.
  • 즉, 워드라는 하나의 프로세스에 여러 개의 쓰레드가 모여있는 것이다.

 

쓰레드를 사용하는 이유는 뭘까?

쓰레드를 이용하면 하나의 프로그램에서 한 번에 하나의 일을 처리하는 것이 아니라 동시에 많은 일을 처리할 수 있다.

 

그림에서처럼 하나의 프로세스에서 처리해야 하는 세 가지 작업 A, B, C가 있다고 치자.

첫 번째와 같이 처리하는 경우보다 두 번째처럼 동시에 처리하는 것이 처리속도가 훨씬 빠르다

 

참고

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

https://donghoson.tistory.com/8

'CS > 운영체제' 카테고리의 다른 글

스케줄러 (scheduler) + Job,Ready,Device Queue란?  (0) 2021.05.18
멀티 프로세스와 멀티 스레드  (0) 2021.05.18
프로세스 간 통신 (IPC, Inter Process Communication)  (0) 2021.05.18
프로세스  (0) 2021.05.17
캐시  (0) 2021.05.17
Comments