[CS 지식] 쓰레드(Thread)

신현식·2022년 11월 11일
0

CS 지식

목록 보기
5/17

쓰레드(Thread)

쓰레드는 프로세스와 마찬가지로 CPU의 작업단위이다. 그러나 쓰레드는 일반 프로세스(중량 프로세스)와 달리 경량 프로세스라 한다. 쓰레드는 자원의 관리보다는 프로그램의 하나의 실행흐름으로서 CPU의 실행되기 위해 스케줄 되어야 하는 개체이다.

  • 쓰레드는 쓰레드 ID, 프로그램 카운터, 레지스터 집합, 스택 공간만을 가지고 있으며
    코드 섹션, 데이터 섹션, OS 자원들은 같은 프로세스에 속한 다른 쓰레드와 공유한다.
  • 쓰레드의 장점: 반응속도, 자원공유, 경제적, multi-processor의 활용의 장점보유

📌 다중 쓰레드(Multi-Thread)

  • 일반 process는 프로세스가 더 이상 쪼개지지 못하는, 하나의 쓰레드만 가지고 있는 작업이다. 예를 들면 처음부터 끝까지 앞에 것이 실행 돼야 다음 것이 실행되는 작업의 경우 이렇게 볼 수 있다.

  • 다중 쓰레드의 장점은 하나의 쓰레드가 멈춘 상태여도 다음 쓰레드가 같은 작업을 돌릴 수 있다는 점이다. 같은 작업에 대한 다중 쓰레드의 협동으로 같은 시간 안에 더 많은 일을 할 수 있다. 또한 프로세스는 프로듀서가 막히면 컨슘 하기가 힘들지만 쓰레드는 쉽다는 장점이 있다.

📌 User Thread & Kernel Thread

  • kernel-supported 쓰레드는 커널(운영체제)에서 지원하는 쓰레드, user-level 쓰레드는 라이브러리 호출의 집합을 통해 커널 위에서 지원된다. Hybrid 쓰레드는 두 가지 레벨의 쓰레드를 모두 지원하는 쓰레드다.

  • 유저 레벨 쓰레드는 커널과 관계가 없으며 스케줄링이 공정하지 못하다는 특성을 가지고 있다. 커널 레벨 쓰레드는 반드시 스위칭 해야한다. 따라서 쓰레드 스위칭에서 시간을 더 잡아 먹는다.

  • user level은 일종의 가상의 쓰레드이고 kernel level은 실제 쓰레드이다. cpu는 커널 레벨의 쓰레드가 보이기 때문에 스케줄링 단위가 쓰레드가 된다. 커널 레벨을 지원하지 않으면 프로세스 단위로 스케줄링 한다.

📌 멀티플 프로세스와 멀티플 쓰레드의 차이점

  • 멀티플 프로세스는 독자적으로 작동하며 스택이 크기 때문에 포인터만 가지고 있다. 각 프로세스별로 메모리 공간이 별도로 있고, 사용자 별로 사용하는 프로세스 목적이 다르므로 서로간의 보완이 필요하다.

  • 멀티플 쓰레드의 경우 다른 쓰레드와 독자적이지 않다. 스택이 작아서 스택 공간을 통째로 가지고 있으며, 모든 쓰레드들이 다 같은 메모리공간을 사용한다. 쓰레드는 각각이 세부 목적을 가지므로 각자 상호 보완해줄 필요가 없다.

📌 쓰레드 풀(Thread Pool)

  • 일정한 수의 쓰레드들을 풀에 만들어 두고 일감을 기다리게 한다. 요청이 들어오면 풀의 한 쓰레드에게 서비스 요청을 할당하고, 끝나면 풀로 되돌아온다. 쓰레드 풀의 장점들로는 새 쓰레드를 만들어 주기보다 기존 쓰레드로 서비스해 주는 것이 빠르며 쓰레드 풀은 쓰레드 개수에 제한을 두기 때문에 많은 수의 쓰레드를 병렬 처리할 수 없는 시스템에 도움이 된다는 것들이 있다.
profile
전공 소개

0개의 댓글