2009-03-18 4 views
23

나는 ASP.NET이 IIS에서 기본적으로 다중 스레드라고 들었습니다. 이 스레딩은 어떻게 이루어 집니까?ASP.NET은 어떻게 멀티 스레드됩니까?

서버 팜에서 다른 코어로 다른 요청을 보내나요?

단일 요청으로 여러 코어를 사용합니까?

더 중요한 것은 스레딩이 IIS에서 더 높게 수행되면 ASP.NET 코드에 스레드를 추가 할 때 이점이 있습니까?

+3

디자인으로 모든 웹 사이트는 각 요청은 다른 모든 요청을 크게 병렬로 제공됩니다, 다중 스레드 –

답변

5

IIS는 여러 코어를 자동으로 사용합니다 (alt 당신이 그렇게 선택한다면 당신은 그것을 끌 수 있습니다.

ASP.NET 코드에 스레드를 추가하면 응용 프로그램의 내부 동작을 제어 할 수 있고 IIS를 사용하여 모든 결정을 내릴 수 있습니다.

+0

막연한 이점입니다. –

+0

막연한 질문을하고 막연한 답을 얻으십시오. 네 가지 원래 질문 중 마지막 질문에 대해 가능한 유일한 대답은 "의존합니다."입니다. –

3

일반적으로 별도의 스레드가 새로운 요청마다 생성되고 운영 체제가 프로세서 스케줄링을 수행합니다. 한 번에 몇 가지 요청 만 처리해야하는 경우가 아니면 여분의 스레딩이 필요하지 않습니다.

+0

귀하의 답변에 따르면 요청이 평생 동안 동일한 스레드에 머물러있게됩니다. 이는 사실이 아닙니다. 스레드 정체를 사용하면 문제가 발생할 수 있습니다. –

+0

글쎄, 우리는 스레드 민첩성에 대해 알고있는 프로그램을 개발하지 못했기 때문에 이전에는 이것에 대해 전혀 몰랐습니다. – sharptooth

+0

IIS도 스레드 풀을 사용하지 않습니까? Afaik는 시작시 스레드를 생성 한 다음 요청간에 다시 사용합니다. – Mendelt

23

서버는 다른 스레드에 대해 다른 요청을 제공 할뿐 아니라 수명주기 동안 스레드를 변경할 수 있습니다. 이를 스레드 민첩성이라고합니다. 나는 그것을 설명하는 좋은 기사를 찾고있다 ...

EDIT : 아직 결정적인 기사는 아니지만, 몇 가지 어려움을 설명하는 one blog post.

편집 : 의견에서 더 많은 링크 :

+1

하나의 요청은 주어진 시간에 둘 이상의 스레드에서 실행되지 않으므로 하루가 끝날 때 전체 요청 처리가 단일 스레드로 간주 될 수 있습니다. (그렇지 않습니까?) – Tomalak

+1

@Tomalak : 아니요, 스레드를 변경할 수 있기 때문에 단일 스레드로 간주 할 수 없습니다. 즉, 요청을 시작할 때 [ThreadStatic] 변수에 물건을 집어 넣으면 요청이 끝날 때 거기에 없을 수 있습니다. –

+0

@ 존 나는 요청에서 다른 스레드를 생성하는 아이디어를 더욱 복잡하게 만든다고 생각한다. 그렇지 않습니까? – sharptooth

8

ASP.net은 .Net 스레드 풀 (구성 가능)을 사용합니다. 각 스레드가 이미 점유 될 때까지 각 요청은 스레드 풀의 스레드 중 하나에 의해 수신됩니다. 또한 IIS 스택에서 큐가 요청 될 때까지 대기합니다. 거기에서 새로운 요청은 매우 추악한 'Server is unavailable'메시지를 만나게됩니다.

이것은 ASP.net 웹 사이트의 일반적인 '멀티 스레딩'이야기입니다.

확장 성을 확보하는 데는 여러 가지 방법이 있습니다. 가장 확실한 성능 테스트는 코드에서 병목 현상을 테스트하고 제거합니다.

ASP.net은 모든 I/O 요청에 I/O 스레드를 활용하여 실제로 여러 코어를 활용할 수 있습니다. 그것은 못생긴 코드를 만들지 만 빠른 적이 결코 없습니다.

"더 중요한 것은 어떤 이점이있다 :

여기

가 그럼 난 아마 전체 질문에 대답하려고이

UPDATE를 수행하는 방법에 대한 최종 MSDN MAG 포스트입니다 스레딩이 IIS에서 최대 까지 이루어지면 ASP.Net 코드에 스레드를 추가 할 수 있습니까? "

짧은 대답은 다음과 같습니다. 장기간 진행되는 프로세스를 기다리는 경우 요청 클라이언트 (예 : 대역 외 AJAX 통화)에 대해 더 좋은 환경을 구현하는 것이 좋습니다. 완료해야 할 작업이 여러 개인 경우

요청 클라이언트 : 그러면 병렬로 작업을 실행하기 위해 새 프로세스를 생성하는 것이 나을 것입니다. 귀하의 사이트가 트래픽을 많이 들어갔을 경우

는, 당신은 정말 당신의 CPU 잘 활용하는 비동기 패턴을 구현 고려할 필요가