개발자

자바 비동기 처리에서 쓰레드 풀 공유 대해서 질문

2월 27일조회 116

spring boot로 개발을 @Async 사용해서 비동기 처리를 하고 있습니다. a, b, c 비동기 작업이 쓰레드 풀을 공유하고 있습니다. a 작업이 딜레이 되며 쓰레드를 점유하고 있어 다른 작업(b, c)에 영향을 끼칠 수 있는 경우라면 보통 쓰레드 풀을 분리해서 사용하나요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

문종호님의 프로필 사진

특정 로직이 쓰레드를 점유하는경우에는 분리해서 사용하는게 보통입니다. semaphore를 사용하여 동시실행을 제한하는방법도 있습니다.

profile picture

익명

작성자

3월 4일

감사합니다!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2월 27일

네, 일반적으로 서로 다른 작업을 수행하는 비동기 처리를 위해 쓰레드 풀을 분리하는 것이 좋습니다. 하나의 작업이 쓰레드를 과도하게 점유하면 다른 작업들에 대한 성능 제약 사항이 생길 수 있습니다. 따라서, 이런 상황에서는 각각의 작업(a, b, c)에 대해 별도의 쓰레드 풀을 사용하는 것이 좋습니다. Spring Boot에서는 `@Async` 어노테이션과 함께 `TaskExecutor` 빈을 생성하여 주입함으로써 각각의 작업에 대해 별도의 쓰레드 풀을 구성할 수 있습니다. ```java @Configuration public class TaskConfig implements AsyncConfigurer { @Bean(name = "taskExecutorA") public TaskExecutor taskExecutorA() { return new ThreadPoolTaskExecutor(); } @Bean(name = "taskExecutorB") public TaskExecutor taskExecutorB() { return new ThreadPoolTaskExecutor(); } } ``` 그리고 `@Async` 어노테이션에 `"taskExecutorA"`와 같은 방식으로 사용하려는 Task Executor의 이름을 명시하여 사용합니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!