본문 바로가기

부트캠프

[멋쟁이사자] 백엔드 - 33일차 회고록

728x90

33일차

학습 목표

  1. 새로운 스레드 API를 활용하여, VO 바운드 작업과 CPU 바운드 작업에 적합한 동시성 프로그래밍 모델을 설계하고 구현할 수 있다.
  2. Executors 및 Virtual Thread Executor를 활용하여, 다양한 유형의 작업을 분리 처리하는 병렬 구조를 구현할 수 있다.
  3. 실행 결과를 기반으로 Virtual Thread의 장단점을 분석하고, 실전 환경에 적합한 스레드 모델을 선택할 수 있다.

1. VO 바운드 / CPU 바운드 작업에 적합한 모델 구현

플랫폼 스레드의 경우 멀티코어 활용, 안정적 병렬 처리와 같은 이유로 CPU 바운드 작업에 적합하다.

가상 스레드는 대기 중인 스레드를 JVM이 다른 작업으로 대체해주기 때문에 I/O 바운드 작업에 적합하다.

2. Executors 및 VirtualThreadExecutor 사용

Thread.startVirtualThread()를 직접 생성할 수 있다.

Executors.newVirtualThreadPerTaskExecutor() 를 통한 병렬 처리 구조 구현할 수 있다.

기존 Executors.newFixedThreadPool() 비교하여 차이점과 장 단점을 알 수 있다.

3. 실행 결과를 기반으로 장단점 분석 및 모델 선택

플랫폼 스레드의 경우 작업이 큐에 쌓이기 때문에 실행 시간이 증가한다.

가상 스레드의 경우 수만 개 이상의 병렬 실행이 가능해 실행 시간이 짧다.

스레드의 경우 사용할일이 별로 없어서 이론 부분만 인지하고 있는 정도였는데 요즘 웹 앱을 비롯해서 스레드를 백엔드에서도 종종 쓰이고 있기 때문에, 잘 알아둬야 할 것 같다.

Java의 경우 스레드가 2종류로 나뉜다는것과 각각의 스레드마다 강점이 다른만큼 잘 구분하여 적절하게 사용해야할것 같다.

그렇지 못할 경우 주어진 인스턴스의 성능을 제대로 활용하지 못하고 낮은 효율을 보여줄 수 있기 때문이다.

금일 학습한 내용들과 개인 학습한 내용을 기반으로 아래 정리해뒀다.

https://lold2424.tistory.com/241

728x90