2014-03-31 2 views
2

request.startAsync()으로 asyncContext을 입력하면 start()이됩니다. 거기에서 서블릿 컨테이너는 전달 된 라이프 사이클을 Runnable으로 관리하며 원래 스레드는 완료되고 풀로 리턴됩니다.비동기 작업을 관리해야합니까? (서블릿 3)

나는 나의 Runnable의의 서블릿 컨테이너 관리에 의존해야하거나 (예를 들어)을 만들 좋을 것이다 컨텍스트 범위의 Queue 및 처리하기 위해 집행의 예를 들어 고정 스레드 풀을 사용하여 실제로을 시작하지 않고 (asyncContext를 생성)?

난 당신이 결과보다 Runnable 다룰 필요가 비동기 작업과 구성 스레드 (당신은 사양에 의해 서블릿 컨테이너에 그를 구성 할 수 있는지 몰라?)

답변

0

그것은 나의 이해의의보다 효율적으로 제어 할 것이다이 방법 Executor/ExecutorService에 전달하여 이것은 서블릿 컨테이너가 처리 할 수있는 것이 아닙니다.

AsyncContext를 요청하면 기본적으로 서블릿 컨테이너가이 요청을 처리 할 스레드를 보유하지 말 것을 알리고 (이전 동기 세계에서 수행되었을 수있는) 최종 응답 생성을 Runnable에 래핑합니다 AsyncContext. 이 시점에서 Runnable이 실행되고 응답이 생성된다는 것은 사용자의 몫입니다. 큐의 우선 순위, 쓰레드 풀 크기 등등.

큐를 가진 ThreadPoolExecutor와 같은 것이 좋을 것입니다. 이렇게하면 현재 진행중인 전화 번호가 특정 크기에 도달하면 요청을 거부하기 시작하려는 경우 직접 처리하는 방법을 선택할 수 있습니다 (과부하 응답 또는 유사한 서비스).

관련 문제