2017-09-15 3 views
0

Servlet 3.0에서는 요청을 처리하는 스레드를 컨테이너에 반환 할 수있는 비동기 작업 인 작업을 만들 수 있습니다.이 컨테이너는 이제 다른 요청을 처리하는 데 사용할 수 있습니다. 비동기 요청에 사용할 수있는 스레드 수를 구성하기 위해 스레드 풀을 사용하는 경우 어떻게 조정해야합니까/고려해야 할 매개 변수는 무엇입니까?비동기 스레드로 스레드 풀 구성을 조정/분석하는 방법은 무엇입니까?

그것은 ForkJoin 풀에서 스레드를 잡아 봄 말해이 같은 처리를 할 수도 있습니다 (Taken from this tutorial :

logger.info("Request received"); 
    DeferredResult<String> deferredResult = new DeferredResult<>(); 
    CompletableFuture.supplyAsync(taskService::execute) 
     .whenCompleteAsync((result, throwable) -> deferredResult.setResult(result)); 
    logger.info("Servlet thread released"); 

우리가 대이 작업을 수행해야 할 때와 관리되는 스레드 풀의 접근 방식을 복용 Callable? 거의 유일한 차이점은 Java 8s commonPool을 구성하고 Spring Boot가 위의 유형의 CompleteableFuture 처리를 수행하는 스레드를 가져오고 다른 구성 요소에서 일부를 구성하는 것입니다. Spring에 대한 ExecutorService 유형입니다. 접근 방식에는 차이가없는 것처럼 보입니다.

답변

1

첫 번째 부분에서는 8 장의 "Java Concurrency In Practice"책의 스레드 풀 적용을 살펴볼 것을 제안합니다.

두 번째 부분에서는 스프링이 제공된 스레드 풀을 사용하여 호출 가능한 작업을 자체적으로 실행하지만 DeferredResult는 응용 프로그램에서 처리해야합니다. 더 많은 제어 기능을 제공합니다. 예를 들어 응용 프로그램은 특정 계산이 별도의 스레드에서 실행되어야하는지 또는 일부 메타 데이터를 기반으로 실행되지 않아도 런타임에서 결정할 수 있습니다. DeferredResult는 콜백도 지원합니다.

관련 문제