2015-01-29 20 views
-1

Tomcat에서 동기화와 비동기 호출의 차이점을 알 수 없습니다. 어디서나 NIO를 사용합니다. 나는 몇 개의 Tomcat 스레드에 의해 관리되는 수천 개의 연결을 가지고있다. long sync 요청이 들어 오면 스레드는 Tomcat 스레드 풀에서 차용하여 요청을 처리합니다. 이 스레드는 긴 프로세스가 완료 될 때까지 대기 한 다음 HTTPResponse에 결과를 씁니다. 그래서 자원은 단지 기다리고 있습니다. 긴 비동기 요청이 들어 오면 Tomcat 스레드는 별도의 스레드를 생성하고 긴 프로세스는이 새 스레드 내에서 시작되고 Tomcat 스레드는 즉시 풀 alomost로 돌아갑니다. 맞습니까? 그렇다면 동기화 및 비동기 모드간에 차이점을 볼 수 없습니다. 두 모드 모두 동일한 양의 스레드가 사용되기 때문입니다.Tomcat에서 동기화 및 비동기 요청 처리가 다른 점은 무엇입니까?

답변

2

"푸시"와 "푸시"의 차이점이 있습니다. 예, 올바른 것입니다. 작업을 수행하기 위해 스레드를 할당해야합니다.

동기화 요청을 사용하면 수동으로 작업자 스레드를 만들고 클라이언트에서 작업 결과를 폴링해야하지만, async를 사용하면 작업 완료시 서버에서 결과를 클라이언트로 푸시해야합니다.

서버가 결과 당 많은 폴링 요청을 처리 할 필요가 없으므로 후자가 약간 더 효율적입니다.

+0

답변 해 주셔서 감사합니다. SOAP 호출과 함께 비동기 모드를 사용하는 경우는 무엇입니까? –

0

감사합니다. 알아 냈습니다. 동기화 요청은 한 요청에 대해 하나의 스레드가 빌려서 필요한 데이터를 기다리는 경우입니다. 비동기 요청은 데이터를 기다리고 비동기 컨텍스트, 즉 클라이언트의 출력 스트림을 요청하도록 푸시하는 요청과 분리 된 하나의 스레드 만있는 경우입니다. 클라이언트가 동기화 요청을 생성하면 추가 스레드는 생성되지 않지만 비동기 컨텍스트는 가입자 목록을 나타냅니다. 데이터가 나타나면 한 스레드가이 목록을 통해 모든 비동기 컨텍스트에 데이터를 씁니다. 결과는 - 동기화 요청은 요청 당 하나의 스레드를 의미하며, 비동기 요청은 많은 동시 요청에 대해 하나 (또는 ​​조금 더)의 스레드를 의미합니다.