Java 기반 웹 애플리케이션과 독립형 Java 애플리케이션에서 멀티 스레딩이 어떻게 다른가


13

나는 Java를 처음 접했고 웹 컨테이너에서 실행되는 웹 기반 응용 프로그램 (제 경우 Jboss)으로 경험이 제한되어 있습니다.

웹 응용 프로그램의 경우 웹 컨테이너가 멀티 스레딩을 처리한다고 말하는 것이 맞습니까? 그렇다면 웹 기반 응용 프로그램에 새로운 트레드를 도입 할 수 있습니까? 그렇게 할 때 어떤 이점이 있습니까? 어떤 시나리오에서 그렇게해야합니까?


EE6까지 스레드를 사용하지 않아야합니다. EE7이 소개 Concurrency Utilities합니다.
Reinstate Monica-M. Schröder

답변:


20

웹 응용 프로그램의 경우 웹 컨테이너가 멀티 스레딩을 처리한다고 말하는 것이 맞습니까?

대부분의 웹 서버 (자바 및 JBoss를 포함한 기타)는 "요청 당 하나의 스레드"모델을 따릅니다. 즉, 각 HTTP 요청은 정확히 하나의 스레드로 완전히 처리됩니다. 이 스레드는 종종 DB 요청과 같은 것들을 기다리는 데 대부분의 시간을 소비합니다. 웹 컨테이너는 필요에 따라 새 스레드를 만듭니다.

Java 에코 시스템 (주로 Netty ) 에서 일부 서버 는 "하나의 스레드가 모든 것을 수행"모델 또는 더 복잡한 무언가를 사용하여 비동기식 요청 처리를 수행합니다. 대기 스레드가 많이 있으면 자원이 낭비되므로 비동기 적으로 작업하는 것이 더 효율적일 수 있다는 기본 개념이 있습니다.

그렇다면 웹 기반 응용 프로그램에 새로운 트레드를 도입 할 수 있습니까?

메모리 누수 또는 동기화 누락과 같은 오류로 인해 재현하기 매우 어려운 버그가 발생하거나 전체 서버가 다운 될 수 있으므로 가능하지만 매우 신중하게 수행해야합니다.

그렇게 할 때 어떤 이점이 있습니까? 어떤 시나리오에서 그렇게해야합니까?

글쎄, 장점은 당신이 병렬로 일을 할 수 있다는 것입니다. 순수한 계산 속도를 향상시키기 위해 스레드를 사용 하는 것은 다른 요청의 처리 속도를 늦출 수 있으므로 웹 서버에서 수행 해서는 안되는 작업입니다. 이런 종류의 작업은 별도의 서버에서 수행해야하며 아마도 일종의 작업 대기열을 사용합니다.

HTTP 요청을 처리하는 맥락에서 멀티 스레딩에 대한 합법적 인 시나리오는 다른 네트워크 리소스에 액세스해야하는 경우가 있습니다 (예 : 여러 다른 웹 서비스 호출). 단일 스 래드에서 수행 할 경우 각 통화가 차례로 완료 될 때까지 기다려야합니다. 그러나 여러 스레드를 사용하는 경우 총 대기 시간은 가장 느린 단일 호출의 지연 일뿐입니다.


3
말이된다. ExecutorService Interface가 웹 애플리케이션에서 새 스레드를 작성하는 가장 좋은 방법입니까?
kapricanon

4
@kapricanon : 예, 처리 할 수없는 특정 요구 사항이 없거나 웹 서버에 이미 비슷한 것이있는 경우가 아니면
Michael Borgwardt 2016 년

2

귀하의 질문에 대한 답변 :

Java 기반 웹 애플리케이션과 독립형 Java 애플리케이션에서 멀티 스레딩이 어떻게 다른가

다르지 않습니다. 일반적으로 구축 된 소프트웨어 웹 응용 프로그램은 각각의 새 요청을 스레드로 만들어 이미 일부 멀티 스레딩을 제공합니다. 다른 응용 프로그램과 마찬가지로 스레드를 사용 / 생성 할 수 있습니다.

실제로 멀티 스레딩을 올바르게 사용하면 성능이 크게 향상 될 수 있습니다. 네트워크 액세스 및 디스크 드라이브 액세스와 같은 I / O 집중 작업의 경우 성능 향상이 거의 항상 보장됩니다. 계산 집약적 인 작업의 경우 서버에서 코어 당 하나의 스레드 규칙을 준수해야합니다. 예를 들어 코어에 i7 프로세서가있는 경우 계산 작업을 수행하려면 7 개의 스레드를 사용해야합니다.

귀하의 질문에 대한 답변 :

그렇게 할 때 어떤 이점이 있습니까? 어떤 시나리오에서 그렇게해야합니까?

Michael Borgwart는 계산 속도를 향상시키기 위해이 작업을 수행해서는 안된다고 말합니다 . 기사에서는 사용자가 계산적으로 많은 작업을 수행해야 할 때 멀티 스레딩이 응답 성을 제공하는 데 도움이 될 수 있다고 제안 하므로 동의하지 않습니다 . 평범한 영어로, 사용자는 멀티 스레딩으로 계산이 많은 작업을 완료하기 위해 오래 기다릴 필요가 없습니다.

스레드를 많이 사용하려면 스레드 풀을 사용하는 것이 좋습니다. 스레드 작성의 오버 헤드가 줄어 듭니다.


이것은 질문에 어떻게 대답합니까?
gnat

1
대답은 그 자체의 장점에 근거해야합니다. 의견을 남기려면 먼저 50 점의 평판을 얻어야합니다.
ChrisF

1

글쎄, 이것은 좋은 질문이며 웹 응용 프로그램 개발에서 일하는 대부분의 개발자는 명시 적으로 멀티 스레딩을 사용하지 않는다고 생각합니다. 응용 프로그램 서버를 사용하여 응용 프로그램을 배포하고 있기 때문에 응용 프로그램 서버는 들어오는 요청에 대한 스레드 풀을 내부적으로 관리합니다.

그렇다면 왜 멀티 스레딩을 명시 적으로 사용합니까? 웹 애플리케이션 개발자가 멀티 스레딩에 노출해야하는 것은 무엇입니까?

많은 요청을 동시에 서버해야하는 대규모 응용 프로그램에서 작업하는 경우 특정 종류의 요청이 많은 처리를 수행하여 응용 프로그램의 성능을 저하시킬 수 있기 때문에 모든 종류의 요청을 동 기적으로 처리하기가 어렵습니다.

특정 종류의 요청을 처리 한 후 웹 애플리케이션이 이메일 및 SMS를 통해 사용자에게 통지해야하는 경우를 예로 들어 보겠습니다. 요청 스레드와 동기식으로 수행하면 웹 애플리케이션의 성능이 저하 될 수 있습니다. 멀티 스레딩의 역할이 여기에 있습니다. 이러한 경우 네트워크를 통해 독립형 멀티 스레드 응용 프로그램을 개발하여 전자 메일 및 SMS 만 전송하는 것이 좋습니다.


이 답변이 다운 보트 인 이유는 무엇입니까?
Anurag Sharma
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.