2011-11-10 3 views
9

사용자가 HTTP를 통해 .aspx 페이지를 요청할 때 ASP.NET이 적어도 하나의 스레드를 생성한다고 가정하는 것이 안전합니까?ASP.NET HTTP 요청이 1 개의 스레드로 번역됩니까?

그렇다면 지속 시간은 얼마나됩니까?

1000 명이 동일한 .aspx 페이지로 HTTP 요청을하면 관련 스레드가 재활용되어 일부 1000 개의 스레드가 생성되지 않습니까?

+1

Microsoft에서 사용자에게 약속하지 않은 것을 가정하는 것은 실제로 안전하지 않습니다. –

+3

그래서 당신이 당신의 스레드를 시작하지 않는 한, 각 요청은 하나의 스레드에 의해 제공됩니다. 서버가 수천 개의 스레드 사이에서 컨텍스트 전환으로 인해 압도 당하지 않도록하기 위해 대개 제한된 양의 스레드가 스레드 풀이라고합니다. 요청 수가 스레드 풀의 스레드 수보다 많으면 다른 요청은 스레드가 해제 될 때까지 대기열에 있습니다. 스레드는 요청이 처리되어야하는 동안 요청을 "지속"하거나 오히려 처리합니다. 요청에 시간 초과가 너무 오래 걸리는 경우가 있습니다. –

답변

10

각 요청에는 iis 페이지 풀에서 스레드가 할당됩니다. 아이디어는 짧은 실행 프로세스 여야 스레드가 다른 요청에 의해 사용하기 위해 페이지 풀로 반환 될 수 있습니다 (페이지 풀 크기는 대개 50와 같이 크지 않습니다). 따라서 장기 실행 요청이있는 경우 다른 요청에 대해 스레드를 비우는 비동기 호출을 만드는 것이 중요합니다. 그런 다음 장기 실행 요청 완료시 풀에서 다른 스레드를 가져 와서 마무리합니다.

결론적으로 1000 명이 동시에 요청을하지 않고 50 명이 완료되면 50 명이 실행되고 다른 950 명이 대기합니다.

+1

자세한 내용은 http://support.microsoft.com/kb/821268을 참조하십시오. Microsoft는 사용하는 용어 대신 작업자 스레드 풀/작업자 스레드를 사용합니다. –

+0

감사합니다. 하지만 페이지 풀 크기는 어디 에서처럼 약 50 정도로 설정되어 있습니까? IIS의 AppPool 속성에는 표시되지 않습니다. – SaltProgrammer

관련 문제