inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Đặt nền tảng để cải thiện hiệu suất của nhà phát triển phần cuối

Chuẩn bị cho một cuộc phỏng vấn

비동기 스레드풀 분리 이유와 Virtual Thread 전환 시 고려사항

26

EunKyung Hwang

2 câu hỏi đã được viết

0

안녕하세요! 좋은 강의 잘 듣고 있습니다.

CompletableFuture.runAsync()에 커스텀 Executor를 따로 넘기는 코드를 보면서 궁금한 점이 생겼습니다.

동기 방식은 어차피 요청 스레드에서 직접 처리되니까 별도 스레드풀 설정이 의미 없는 거라 비동기에서만 설정하는 건가요? 아니면 동기에서도 풀을 따로 구성하는 케이스가 있는지 궁금합니다.

그리고 Java 21부터는 Executors.newVirtualThreadPerTaskExecutor()가 기존 플랫폼 스레드풀을 대체하는 권장 방식인지도 여쭤보고 싶습니다. Virtual Thread는 풀링 없이 매 작업마다 새로 생성하는 방식이라고 이해했는데, 실무에서 전환할 때 주의할 포인트가 있다면 함께 말씀해 주시면 감사하겠습니다!

java mysql spring-boot cache index

Câu trả lời 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.
EunKyung Hwang님, 질문 주셔서 감사합니다!

  1. 비동기에서의 스레드풀 구성: 일반적으로 비동기 작업은 비동기적으로 실행될 수 있는 독립된 스레드가 필요하기 때문에 별도의 스레드풀 구성이 중요합니다. 동기 방식은 요청 스레드에서 처리되므로, 별도의 스레드풀을 사용하는 것이 필요하지 않습니다. 다만, 특정한 경우에는 동기 작업도 스레드풀을 활용하여 처리해야 할 경우도 있을 수 있지만 이는 비동기만큼 일반적인 경우는 아닙니다.

  2. Java 21의 Virtual Thread와 전환 주의 사항: Java 21에서 소개된 Executors.newVirtualThreadPerTaskExecutor()는 플랫폼의 스레드풀을 대체할 수 있는 권장 방식으로 소개되고 있습니다. Virtual Thread는 작업마다 새로 생성되며, 이는 JVM에서 관리되기 때문에 메모리 사용량과 컨텍스트 스위칭의 부담을 줄일 수 있습니다. 실무에서 전환할 때 주의해야 할 점으로는, 플랫폼 스레드에 비해 Virtual Thread가 모든 상황에서 적합하지 않을 수도 있다는 점입니다. 특히 I/O 작업이 많은 경우 결과가 달라질 수 있으므로 성능을 잘 테스트하고 모니터링하는 것이 중요합니다.

추가적으로 스레드풀 등을 구성할 때의 참고가 될 수 있는 문서 링크도 아래와 같이 첨부합니다:
- Spring’s asynchronous method running capability

감사합니다. 추가 질문이 있으시면 언제든지 말씀해 주세요!

script Validate가 안됩니다.

0

55

1

thread pool

0

45

1

ngrinder 설치관련

0

128

1

캐싱 데이터가 안보입니다.

0

136

2

ExecutorService와 CompletableFuture의 차이점과 역할

0

262

2

섹션4: Ngrinder를 통한 성능 개선 확인 에서 사용하는 예제 코드

0

212

2

현업에서의 부하테스트 및 Ngrinder 설치

0

347

2

인덱스 활용 질문

0

332

2

프로젝트 적용하는데 어려움이 있어 질문드립니다.

0

306

1

nGrinder validate가 안됩니다.

1

738

2

EhCacheManagerFactoryBean

0

405

2

인텔리제이 EditConfiguration 옵션 추가하는 방법 [ 공유O 질문X ]

2

511

2

프로젝트 공유

1

436

2

scouter client

0

387

2

스카우터 설치

0

491

2

생각보다 부하 테스트가 CPU를 많이 타는거 같은데 정상이겠죠?

0

360

1

로컬에서 성능 테스트하는 것이 어떨 때 유의미한가요?

0

957

1

nginder script작성 후 실행 후 Connection refused에러

0

749

2

scouter C드라이브 말고 다른 곳에서 실행 시 NoSuchFile 오류

0

415

2

java17환경에서 scouter 실행법 문의

1

1031

2

첫번째 회사에서 서비스 회사로 이직하실때 준비

0

377

1

ngrinder-agent 실행 문제(Unmapped relationship: 7)

0

370

1

ngrinder쪽에 스크립트 클릭시 오류

0

782

3

findNoticeByDates 실행 에러

1

245

2