2012-06-11 3 views
0

일반적으로 톰캣에서는 스레드이 실행되고 요청이 들어 오면 요청을 처리하는 책임은 스레드 풀에서 스레드에 할당됩니다.톰캣 블로킹과 비 블로킹 메인 스레드

메인 스레드이 확장 성 측면에서 차단되었거나 차단되지 않은 경우 중요합니까?

+0

어떤 상황에서 블로킹합니까? – Brady

+0

io/non blocking io –

+0

메인 스레드라는 용어는 Java에서 실제 의미가 있습니다. 응용 프로그램 (tomcat)을 시작하는 스레드는 주 스레드에서 실행됩니다. 요청을 실행하는 스레드를 의미합니까? –

답변

1

들어오는 요청이 Tomcat에서 처리되면 스레드 풀의 스레드에 연결을 할당합니다.

여기서 중요한 것은 가능한 한 빨리 스레드를 실행하는 것입니다. 일반적으로이 스레드에서 io 호출을 실행합니다 (파일 io, db 등).

예상 트래픽을 처리하려면이 스레드 풀 기능의 크기를 조정해야합니다.

Java EE 서블릿 스펙을 사용하는 경우 들어오는 연결 방식에 따라 하나의 스레드에서 요청을 처리해야합니다.

거기에는 몇 가지 차단되지 않는 프레임 워크가 있습니다. http://www.playframework.org/ 및 부두 (Jetty nonblocking by default?)

을 확인
2

비 IO는 다음과 같은 장점이 있습니다 차단 :

  • 높은 확장 성 : 때문에 더 - 더 클라이언트 당 하나 개의 스레드가 필요합니다.하지 효과적으로 많은 수의 클라이언트를 지원할 수 있습니다.
  • 높은 연결 유지 : 차단 IO는 다음 요청의 keepalive 시간까지 차단해야합니다. 논 블로킹 (Non-Blocking) 알림 모델이므로 높은 킵 얼라이브 시간을 지원할 수 있습니다.
  • 높은 부하에서의 성능 향상 : 차단 IO에는 연결 당 하나의 스레드가 있기 때문에 n 개의 연결에 대해 n 개의 스레드가 필요합니다. n 값이 증가하면 더 많은 스레드 컨텍스트 전환으로 인해 성능이 저하됩니다.
+0

Java에서 non-blocking io에 관한 한 가지 : 다소 어렵습니다. jdo와 같은 db 프레임 워크를 사용한다고 가정 해 보겠습니다. 데이터베이스의 모든 작업이 차단됩니다. 나는 non-blocking http 서버를 작성하고 싶다면 아마도 nodejs로 갈 것이다. – jontro