스레드 ( Thread )

J4mbo9·2022년 12월 10일
0

스레드 ( Thread ) 란?

  • 프로그램 내에서 실행되는 프로그램 제어 흐름(실행 단위)를 말함
  • 애플리케이션 코드를 하나하나 순차적으로 실행함
  • 한 번에 하나의 코드 라인만 수행
  • 동시 처리가 필요하면 스레드 추가 생성 (멀티 스레드)

스레드1 처리중에 다른 요청이 들어온다면 어떻게 하면 될까?
2가지 방법이 있다. 하나는 요청1을 처리할 때 까지 요청2를 대기 시키는 것이고,
다른 하나는 요청마다 스레드를 생성 하는것이다. 하지만 위 2가지 모두 단점이 있다.

방법1은 요청1의 작업이 끝나지 않고 지연된다면 요청1,요청2 모두 작업을 못한다는 것이다.
방법2는 요청마다 스레드를 생성하는 것인데 이 경우엔 장단점이 있다.

장점

  • 동시 요청 처리
  • 리소스(CPU,메모리)가 허용될 때까지 처리가능
  • 하나의 스레드가 지연되어도, 나머지 스레드는 정상 동작

단점

  • 스레드는 생성비용이 매우 비싸, 만약 고객 요청이 들어올때마다 스레드를 생성하면, 응답속도가 느려질것이다.
  • 스레드 컨텍스트 스위치 비용이 발생
  • 스레드 생성에 제한이 없어 , 요청이 많이 들어온다면 리소스가 한계에 도달하여 서버가 죽을 수 있다.

스레드를 공부하다보니 크게 분류하여 특징들을 주유소에 비유해보니 외우기 쉬운것같다.
스레드를 주유기, 한대의 차량을 요청이라고 생각해보자.

하나의 주유기는 한대의 차량만 넣을 수 있다고 하고,주유기가 한대를 사용중에
만약 다른 차량이 들어온다면?
주유기를 한대 더 사용해야하거나, 앞의 차량의 주유가 끝날때까지 뒤의 차량은 기다려야 한다.

만약 주유기를 추가하게 된다면?

더 많은 차량을 받을 수 있을 것이다. 하지만 추가비용이 너무 많이 든다. 그리고
무지성으로 주유기를 추가하게 된다면 주유소는 폐업하게 될것이다.


스레드 풀??
스레드 풀이란 작업 처리에 사용되는 스레드를 제한을 두어 작업큐에 들어오는 작업들을 하나씩
스레드가 맡아 처리한다.

특징

  • 필요한 스레드를 스레드 풀에 보관,관리
  • 스레드 풀에 생성 가능한 스레드의 최대치 관리
  • 스레드가 필요하면 이미 생성되어있는 스레드를 스레드 풀에서 꺼내 사용
  • 사용을 종료하면 스레드 풀에 스레드를 반납
  • 제한 갯수만큼 스레드를 사용중이라면 기다리는 요청을 거절하거나, 특정 숫자만큼 기대하도록 설정할 수 있다.

이렇게 제한을 두어 미리 생성해둔 스레드를 꺼내 사용 반납 한다면 어떤 장점이 있을까?

  1. 스레드가 미리 생성되어있으므로, 스레드 생성,종료하는 리소스가 절감하고, 미리 생성해두었기 때문에 응답시간이 빠르다.
  2. 스레드의 생성개수가 제한되어 있으므로, 너무 많은 요청이 들어오더라도 기존요청은 안전하게 처리할 수 있다.

주유소에 주유기를 처음부터 갯수를 정해 설치해놓는다면 ?

애초에 설치해둔 주유기 수량이 정해져있기 때문에 많은 차량들이 들어오더라도 기존에 주유 중인 차량들은 문제없이 주유할 수 있고, 기다리는 차량들을 거절하거나, 몇 대만 받을지 정할 수 있다.
그리고 만약 주유가 끝난 차량이 있다면 비워진 주유기쪽에 대기 차량을 유도하여 즉시 주유할 수 있다.


이렇게 써보니 혼자서 비유하며 외울때랑은 너무 어려워진 것같다..다음에는 좀더 쉽게 비유할 수
있게 생각하자

profile
개발개발개발개발

0개의 댓글