쓰레드(Thread)란 무엇인가?(단일 스레드/멀티 스레드 장단점)

2022. 4. 20. 21:42코딩공부/ComputerScience

  • 쓰레드란 프로그램(프로세스) 실행의 단위이며
    하나의 프로세스는 여러개의 쓰레드로 구성이 가능하다.
  • 하나의 프로세스를 구성하는 쓰레드들은 프로세스에 할당된 메모리, 자원 등을 공유한다.
  • 프로세스와 같이 실행, 준비, 대기 등의 실행 상태를 가지며
    실행 상태가 변할때마다 쓰레드 문맥교환(context switching)을 수행한다.
  • 각 쓰레드별로 자신만의 스택 레지스터를 가진다.

 

쓰레드(Thread)의 장점

  • 쓰레드는 프로세스보다 생성 및 종료시간, 쓰레드간 전환시간이 짧다.
  • 쓰레드는 프로세스의 메모리, 자원등을 공유하므로 커널의 도움없이 상호간에 통신이 가능하다.

 

단일 스레드

- 하나의 프로세스에서 하나의 스레드 실행

- 하나의 레지스터와 스택으로 표현

 

장점 : 

자원 접근에 대한 동기화를 신경쓰지 않아도 된다.

여러 개의 스레드가 공유된 자원을 사용할 경우 각 스레드가 원하는 결과를 얻게 하려면

공용 자원에 대한 접근이 통제되어야 하며 이 작업은 프로그래머에게 많은 노력을 요구하고 비용을 발생시킨다.

단일 스레드 모델에서는 이러한 작업이 필요하지 않다.

 

단점:

프로세서를 최대한 활용하게 하려면 cluster 모듈을 사용하거나 외부에서 여러 개의 프로그램 인스턴스를 실행시키는 방법을 사용해야 한다.

이 때 고려해야할 문제가 있는데, 바로 다수의 프로그램 인스턴스가 어떻게 상태를 공유할 것인가에 대한 문제다.

사실 이것은 멀티 스레드 환경의 서버 프로그램도 확장성을 확보하기 위해 풀어야 할 숙제이긴 하다.

단순하고 빠른 메모리 기반 NoSQL 데이터 베이스인 Redist가 좋은 고려대상이다.

하지만 서버 프로그램 인스턴스 간 상태 공유를 최소화하거나 가능하면 없애는 방향으로 아키텍처를 설계하는 것이 가장 바람직한 방법이라고 한다.

 

멀티 스레드

- 프로그램을 다수의 실행 단위로 나누어 실행

- 프로세스 내에서 자원을 공유하여 자원생성과 관리의 중복을 최소화

- 서버가 많은 요청을 효율적으로 수행할 수 있는 환경을 제공

- 각각의 스레드가 고유의 레지스터와 스택으로 표현됨

 

장점:

1) 새로운 프로세스를 생성하는 것보다 기존 프로세스에서 스레드를 생성하는 것이 빠르다.

2) 프로세스의 자원과 상태를 공유하여 효율적으로 운영이 가능하다

3) 프로세스의 문맥교환보다 스레드의 문맥교환이 더 빠르다.

 

단점:

1) 하나의 스레드만 실행중일 때에는 실행시간이 되려 지연될 수 있다.

2) 멀티 스레딩을 위해 운영체제의 지원이 필요하다.

3) 스레드 스케쥴링을 신경써야 한다.

 

 

참고자료

https://beenlife.tistory.com/114

https://goodgid.github.io/What-is-Thread/