2009-05-15 4 views
3

페이지를 탐색하여 예약해야하는 예약 된 작업이 있습니다. 웹 호스트에서 Windows 스케줄러를 사용할 수 없습니다.ASP.NET MVC에서 안전하게 스레드를 생성 할 수 있습니까?

이 작업에서 수행하는 작업 중 하나는 다른 웹 사이트에서 데이터를 가져 오는 것입니다. 느린 웹 요청을 처리 할 수있는 작업으로 인해 스레딩을 사용하도록 설정했습니다.

mvc 작업에서이 작업을 실행하면 전체 웹 서버가 엉뚱한 페이지로 바뀌어 페이지가 더 이상로드되지 않습니다.

웹 응용 프로그램의 스레딩을 사용하는 것이 좋지 않습니까? 안전하게 할 수있는 방법이 있습니까? 어떤 스레딩 한계가 있습니까? 좀 더 많은 정보를 알 필요가 있습니다.

편집 :? SUBQUESTIONS

내가 ASP.NET 런타임 (감사 안톤)에 의해 사용되는 스레드 (에서 스레드를 사용하는 경우, 나는 그것을 사용할 수있는 스레드의 개수를 제한 할 수 있습니다 무엇 ASP.NET 스레드 풀 크기 제한은 무엇입니까?

아마도 별도의 ASP.NET 응용 프로그램이 포함 된 가상 폴더일까요? 그러면 스레드 풀 권한이 제한됩니다.

+0

참고 사항 : http://stackoverflow.com/questions/1325718/using-threadpool-queueuserworkitem-in-asp-net-in-a-high-traffic-scenario – Matthias

답변

3

들어오는 요청을 처리 할 때 ASP.NET 런타임은 용량이 제한적인 .NET ThreadPool에서 스레드를 가져옵니다. 따라서 해당 트레드 풀의 스레드를 사용하는 경우 응용 프로그램의 확장성에 해를 미칠 수 있습니다.

주위의 방법은 보통 Thread으로 산란되지만, AppPool을 재활용하면 이러한 요소가 삭제 될 수 있습니다.

+0

방금 ​​문제를 해결했다고 생각합니다. 커맨드 라인에서 이것을 실행했기 때문에 threadpool 크기를 변경하고있었습니다. 이것은 그것이 넘어지는 원인이되는 것 같습니다. Sub questions then : 사용하는 쓰레드 풀에서 얼마나 많은 쓰레드를 제한 할 수 있습니까? –

+0

@Matthew 정확히 명령 줄에서 실행하고 있습니까? –

+0

죄송합니다. 작성되었습니다. 내 작업은 On-Demand를 수동으로 실행하기 위해 콘솔 앱에 캡슐화해야했습니다.문제없이 실행되었으며 웹 사이트에서 실행했을 때만 문제가 발생하기 시작했습니다. 당신은 threadpool 크기를 언급 할 때 나의 기억을 자극했다. –

0

생각합니다. 그것이 어떻게 행해지 느냐에 달려 있습니다. ASP.NET에서 스레딩을 할 때는 유능하지 않지만 클라이언트의 요청을 처리하는 데 사용되는 스레드를 사용하면 결국 위험 할 수 있다고 생각합니다.

Here is a tutorial on multithreading in ASP.NET 이렇게하면 조금만 전달하는 데 도움이 될 수 있습니다.

3

스레드가 요청/응답 (이제 사라질 수 있음)으로 다시 회신하지 않는 한 적극적으로 문제가 발생하면 놀랄 것입니다. 어떤 증상이 있습니까? "이상한"것을 정의 할 수 있습니까?

문제없이 로깅 등을 위해 스레드를 정기적으로 사용합니다.

영향을 최소화하기 위해 제작자/소비 패턴을 사용할 수 있으므로 많은 ASP.NET MVC 요청/응답 스레드를 처리하는 작업자 스레드가 하나 (또는 ​​소수) 밖에 없습니다.

+0

'Wacky'는 처리가 완료되었음을 의미합니다. 내 작업 (모든 생성 된 스레드가 종료 될 때까지 기다렸다가 종료해야 함)을 반환하고 View()를 반환하지만 브라우저는 페이지 수신을 완료하지 않으며 사이트의 다른 페이지 멈 춥니 다. –

관련 문제