ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • spring netty thread sleep, webflux 에서 sleep 어떻게 하는게 나을까
    Spring/spring boot 및 기타 2023. 6. 14. 12:12

    webflux 를 사용하면 spring boot 내장서버가 tomcat 에서 netty 로 사용해야 하는데,

    netty 가 비동기에 유리한 서버이다 보니, sleep 을 주고 싶은 로직이 있을 떄 sleep 을 주기가 비효율적이다

     

     

    Spring Netty를 사용할 때 Thread.sleep()를 사용하여 지정된 시간 동안 스레드 실행을 일시 중지 할 수 있다 .

    하지만 이벤트 루프를 차단하고 성능 문제를 일으킬 수 있으므로 Netty 애플리케이션에서 와 같은 차단 작업을 사용하는 것은 일반적으로 권장되지 않는다 .

     

    대신 Netty는 패키지 에서 사용할 수 있는 ScheduledExecutorService를 사용하여 작업 지연을 위한 비동기 대안을 제공한다 io.netty.util. schedule()의 방법을 사용하여 ScheduledExecutorService지정된 지연 후 작업 실행을 예약 할 수 있습니다 .

    ScheduledExecutorService 다음은 Spring Netty 애플리케이션에서 어떻게 사용할 수 있는지에 대한 예입니다

     

     

    spring netty 에서 ScheduledExecutorService를 사용한 예시다.

    EventLoopGroup클래스에 빈을 주입합니다 .

    @Autowired
    private EventLoopGroup eventLoopGroup;
     

    ScheduledExecutorService지연이 있는 작업을 예약하려면 다음을 사용

     
    eventLoopGroup.schedule(() -> {
        // Code to be executed after the delay
    }, 500, TimeUnit.MILLISECONDS);

     

     

    이 예에서 작업은 500밀리초 지연 후에 실행됩니다. 필요에 따라 지연 및 시간 단위를 조정할 수 있다.

    Netty에서 제공하 ScheduledExecutorService를 사용하면 이벤트 루프를 지연시키지 않으므로 애플리케이션이 응답성과 성능을 유지할 수 있습니다.

    참고: Spring Netty 애플리케이션에서 Thread.sleep()를 사용해야 하는 경우 이벤트 루프 차단을 피하기 위해 별도의 스레드에서 사용할 수 있습니다. 그러나 일반적으로 가능할 때마다 Netty에서 제공하는 비동기 메커니즘을 활용하는 것이 좋다.

     

    ScheduledExecutorService는 특정 시간 또는 간격으로 작업을 예약하고 실행하는 편리한 방법을 제공하므로 주기적 또는 지연된 작업을 수행해야 하는 시나리오에 유용.
    비동기 이벤트 기반 네트워크 애플리케이션 프레임워크인 Netty는 ScheduledExecutorService를 활용하여 비차단 방식으로 지연된 작업을 처리한다. 애플리케이션의 실행 및 성능을 차단하지 않고 이벤트 루프에서 작업을 예약할 수 있다.

     

     

     

    반응형

    댓글

Designed by Tistory.