인프런 커뮤니티 질문&답변

수강자님의 프로필 이미지

작성한 질문수

Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부

webflux 쓰레드 개수 문의

23.09.12 10:55 작성

·

778

1

문의사항.png웹플럭스의 쓰레드 관련 문의가 있습니다.

강의 자료에 보면 위와 같은 그림이 있는데요,

웹플럭스에서 사용하는 쓰레드 = (요청 핸들러 쓰레드 + 이벤트 루프 쓰레드) X CPU 코어 수로 계산하는게 맞을까요?

 

I/O 작업 등은 커널 쓰레드를 호출하여 작업이 진행된다는 블로그 글이 있던데, 쓰레드 계산할 때 이 부분도 포함해서 계산해야하는지 문의드립니다.

답변 1

0

Kevin님의 프로필 이미지
Kevin
지식공유자

2023. 09. 12. 12:11

석재님, 안녕하세요?
질문하신 내용이 두 가지인 것 같은데 답변을 드려보겠습니다.

  1. 웹플럭스에서 사용하는 쓰레드 = (요청 핸들러 쓰레드 + 이벤트 루프 쓰레드) X CPU 코어 수로 계산하는게 맞을까요?
    --> Spring WebFlux에서는 일반적으로 CPU 코어 수만큼의 쓰레드를 이벤트 루프의 쓰레드로 사용하는데, CPU 코어 개수가 4보다 작으면, 최소 4개의 쓰레드를 사용하고, 4보다 크면 코어 수만큼의 쓰레드를 사용합니다. 아래 코드는 Reactor Netty에서 쓰레드를 몇 개 생성하는지에 대한 내용이 포함되어 있는 코드인데 참고하시면 좋을 것 같습니다.
    package reactor.netty.resources;

    @FunctionalInterface

    public interface LoopResources extends Disposable {

    /**

    * Default worker thread count, fallback to available processor

    * (but with a minimum value of 4)

    */

    int DEFAULT_IO_WORKER_COUNT = Integer.parseInt(System.getProperty(

    ReactorNetty.IO_WORKER_COUNT,

    "" + Math.max(Runtime.getRuntime().availableProcessors(), 4)));

    }

     

  2. I/O 작업 등은 커널 쓰레드를 호출하여 작업이 진행된다는 블로그 글이 있던데, 쓰레드 계산할 때 이 부분도 포함해서 계산해야하는지 문의드립니다.
    --> 커널 쓰레드는 시스템 레벨에서 I/O 작업을 처리하기 위해 사용되는 쓰레드로 이벤트 루프에서 사용되는 쓰레드와 별개의 영역에서 실행되는 쓰레드라고 보시면 될 것 같습니다.

    참고로 이벤트 루프나 WebFlux에 대한 내용은 3부에서 자세하게 다룰 예정이니, 조금 기다려주시면 감사드릴게요.