2009-09-09 5 views

답변

23

웹 응용 프로그램은 이미 호스팅 환경 (IIS 등)에 의해 이미 멀티 스레드되어 있습니다. 페이지가 CPU 바인딩되어 있고 다중 코어를 사용하려는 경우 여러 시스템 스레드가 이미 사용중인 경우와 같이 여러 스레드가 잘못된 아이디어 일 것입니다.

시간이 일 수도 있습니다. IO 바인딩 일 때 도움이됩니다. 예를 들어 3 개의 외부 웹 서비스와 대화하고 데이터베이스와 대화하며 파일을 작성해야하는 웹 페이지가 있습니다 (모두 관련이 없음). 로컬 CPU를 지나치게 많이 영향을주지 않고 (여기서는 실제 지연이 네트워크에 있음) 전반적인 처리 시간을 줄이기 위해 다른 스레드에서 병렬로 처리 할 수 ​​있습니다 (완료된 포트 사용을 최대화하기 위해 내장 된 비동기 작업을 사용하는 것이 이상적입니다).

물론 이러한 경우에는 웹 응용 프로그램에서 작업을 대기열에 넣고 별도의 서비스를 대기열에서 제외하고 처리하는 것이 더 좋을 수도 있지만 호출자에게 즉각적인 응답을 제공 할 수는 없습니다 완료 등을 확인하기 위해 나중에 다시 확인해야 함).

+1

좋은 답변, 특히 inbuilt 비동기 작업을 사용하는 것이 좋습니다. – RichardOD

1

멀티 스레딩의 이점을 얻으려면 응용 프로그램을 병렬로 실행할 수 있어야합니다. 그렇지 않은 경우 멀티 스레딩의 오버 헤드로 인해 이점이 훨씬 큽니다.

내 경험에 의하면 대부분의 웹 응용 프로그램은 짧은 실행 방법으로 구성되어 있으므로 호스팅 환경에서 이미 제공되는 병렬 처리와는 별도로 웹 응용 프로그램의 개별 부분 내에서 다중 스레드의 이점을 누리는 것이 드뭅니다 . 아마 그것이 이익을 제공할만한 사례가 있을지 모르지만 제 추측은 매우 일반적이지 않다는 것입니다.

3

IMHO 웹 기반 응용 프로그램에서 멀티 스레드를 사용하지 마십시오.

아마도 멀티 스레드 응용 프로그램은 올바른 디자인의 표준 응용 프로그램에서 성능을 향상시킬 수 있지만 웹 응용 프로그램에서는 속도 대신 높은 처리량을 유지하려고 할 수 있습니다.

하지만 당신은 몇 동시 연결되어있는 경우, 아마 당신은 글로벌 성능 저하

1

ASP.NET없이 병렬 스레드를 사용하여 간단한 요청 처리를위한 그래서 거기에 이미 병렬로 여러 요청을 처리하기 위해 여러 스레드를 산란 할 수있다 다른 스레드를 수동으로 생성해야하는 경우는 거의 없습니다. 그러나 이는 다른 스레드의 생성 보증을 통해 내가 온 몇 드문 시나리오가 있습니다 :

  • 시간이 걸릴 수 있으며 페이지 처리의 나머지 부분과 병렬로 실행할 수있는 작업이있는 경우는, 거기에 보조 스레드를 생성 할 수 있습니다. 예를 들어 요청 결과로 폴링해야하는 웹 서비스가있는 경우 Page_Init에 다른 스레드를 생성하고 Page_PreRender에서 결과를 확인할 수 있습니다 (필요한 경우 대기 중). 이것이 성능상의 이점이 될지 여부는 여전히 의문이지만 스레드를 생성하는 것은 저렴하지 않으며 일반적인 Page_Init와 Page_Prerender 사이의 시간은 밀리 초 단위로 측정됩니다. 이것에 대한 스레드 풀을 유지하는 것이 좀 더 효율적일 수 있으며, ASP.NET에는 "비동기 페이지"라는 것이 있습니다.이 비동기 페이지는이 필요성에 더 적합 할 수 있습니다.
  • 주기적으로 정리하려는 리소스 풀이있는 경우. 예를 들어 제한된 .NET 바인딩과 함께 제공되는 이상한 DBMS를 사용하고 있지만 풀링 지원이 없다고 상상해보십시오 (이것이 내 경우였습니다).이 경우 DB 연결 풀을 직접 구현해야 할 수도 있습니다.이 경우 분당 한 번씩 깨어나서 오랫동안 사용되지 않은 연결이 있는지 확인하는 "클리너 스레드"가 필요합니다. 따라서 닫힐 수있다).

ASP.NET에서 자신의 스레드를 구현할 때 염두에 두어야 할 또 다른 사항 - ASP.NET은 잠시 동안 비활성 상태 인 경우 해당 프로세스를 종료하는 것을 좋아합니다. 그러므로 당신은 당신의 스레드가 영원히 살아있을 수 있다는 것에 의지해서는 안됩니다. 언제든지 해지 될 수 있으며 준비가 잘되어 있어야합니다.

2

다중 스레드는 하나의 프로세스에 더 많은 처리 시간을 제공하여 더 빠르게 실행할 수있게 해주는 기술입니다. 그것은 더 많은 쓰레드를 가지므로 더 많은 CPU 사이클을 먹는다. (여러 대의 CPU가있는 경우) 데스크톱 응용 프로그램의 경우 많은 의미가 있습니다. 그러나 웹 사용자에게 더 많은 CPU주기를 부여하면 요청을 동시에 수행하는 99 명의 다른 사용자와 동일한주기가 사라집니다. 그래서 기술적으로 나쁜 일입니다.

그러나 웹 응용 프로그램은 다중 스레드를 사용하는 다른 서비스 및 프로세스를 사용할 수 있습니다. 예를 들어, 데이터베이스는 연결하는 모든 사용자에 대해 별도의 스레드를 생성하지 않습니다. 스레드의 수를 제한하여 연결 풀에 연결을 추가하여보다 빠르게 사용합니다. 사용 가능한 연결 또는 풀링 된 연결이있는 한 사용자는 데이터베이스 액세스 권한을 갖습니다. 데이터베이스 연결이 끊어지면 사용자는 기다려야합니다.

기본적으로 웹 응용 프로그램에 여러 스레드를 사용하여 특정 순간에 활성 사용자 수를 줄일 수 있습니다! 이를 통해 시스템은 자원을 과부하하지 않고 여러 사용자와 자원을 공유 할 수 있습니다. 대신, 사용자는 자신의 차례가되기 전에 줄을 서서 기다려야합니다.

이것은 웹 응용 프로그램 자체에서는 멀티 스레딩이 아니지만 웹 응용 프로그램에서 사용되는 서비스에서 멀티 스레딩입니다. 이 경우에는 소량의 스레드 만 활성화되도록 제한하여 사용됩니다.