2012-09-16 1 views
0

상황 스레드 : 높은 규모의 푸른 IIS7 응용 프로그램을하는이 작업을 수행해야합니다 :푸른 웹 역할 - Monitor.Wait 및 기아에게

  1. 수신 요청
  2. 장소 요청 페이로드를 큐에 분리 할 비동기 처리
  3. 에 대한
  4. 는 비동기 프로세스가 클라이언트에
  5. 에 응답을 완료 알림에 대한
  6. 대기 클라이언트 연결을 유지

이들은 장기 실행 프로세스 (30 초에서 5 분)입니다.

우리가 여기서 호출 한 객체에서 Monitor.Pulse (...)를 호출하기 위해 비동기 프로세스에서 동일한 웹 응용 프로그램에 대한 콜백을 기다리는 중 Monitor.Wait (...)을 사용하는 경우 여기에 Monitor.Wait() on,이 효과적으로 쓰레드 기아를 서둘러 만들 것인가?

만약 그렇다면 어떻게 완화시킬 수 있습니까? 콜백을 기다리는 데 더 좋은 패턴이 있습니까? 예를 들어 Response 개체를 스레드로부터 안전한 사전에 배치 한 다음 어떻게 든 반환하고 콜백 코드가 응답을 잠그고 클라이언트에 응답하도록 할 수 있습니까? 그렇다면 어떻게?

또한 비동기 프로세스가 종료되고 콜백을 호출하지 않으면 Monitor.Pulse()가 실행되지 않습니다. 우리의 실이 지금 달렸어?

+2

왜 AsyncPage/AsyncController를 보지 않습니까? – astaykov

+0

고맙습니다. 당신의 제안에 따라, 우리는 이것을 보았습니다. 그리고 그것은 확실히가는 길입니다. 우리의 새로운 도전 과제는 Azure Topic의 동시 연결 수를 100으로 제한하는 것이므로 더 많은 토픽을 만들어야합니다. 이 대답을 할 수 있니? 네가 그렇게한다면 상자를 체크 할 것이다. –

답변

1

요구 사항을 감안할 때 AsyncPage/AsyncController (ASP.NET WebForms 또는 ASP.NET MVC 사용 여부에 따라 다름)을 살펴볼 것을 권합니다. 이러한 기능을 통해 I/O 스레드를 차단하지 않고도 IIS에서 장기 실행 작업을 실행할 수 있습니다.

관련 문제