2011-02-05 5 views
9

내 응용 프로그램에 log4net을 추가 했으므로 사용자 활동의 스레드 ID가 내 웹 사이트를 탐색 할 때 볼 수 있습니다. 스레드 할당이 IIS7에서 어떻게 발생하는지에 대한 특정 알고리즘이 있습니까? 아니면 단지 난수 할당입니까? (내 트래픽이 적은 사이트가 대부분 10-30 범위의 스레드를 보여주기 때문에 의심 스럽습니다.) 사용 가능한 스레드 수에 대한 최대 값은 무엇입니까? 그리고 나는 나의 스케쥴러가 이상한 쓰레드 ID로 나타나는지 알아 차릴 수있다. 스케줄러는 Quartz.net이고 id는 숫자가 아닌 "Scheduler_Worker-10"으로 표시됩니다.IIS7 스레드는 어떻게 할당됩니까?

+0

나는 적어도 하나의 스레드가 연결 당 할당되었다고 가정하고, 응용 프로그램에 대한 몇 가지 마스터 스레드 (연결을 허용하고 전역 응용 프로그램 상태를 관리하는 등)를 가정합니다. 이 질문은 대답 일 뿐이므로 추측 일뿐입니다. – IDWMaster

+2

http://stackoverflow.com/questions/4839657/how-are-threads-tied-to-requests-through-http-sys-iis-and-asp-net을 참조하십시오. –

답변

8

This은 알아 둘 사항 만 설명합니다.

발췌 : ASP.NET이 통합 모드에서 IIS 7.0에서 호스팅되는 경우

, 스레드의 사용은 조금 다른 입니다. 우선, 응용 프로그램 수준 대기열은 더 이상 없습니다. 그들의 성능은 항상 이었습니다.이 문제를 해결할 희망이 없었습니다. 그리고 우리는 그걸 제거했습니다. 그러나 아마 가장 큰 차이는 IIS 6.0 또는 ISAPI 모드에서 ASP.NET 동시에 실행 요청 스레드의 수를 제한하는,하지만 IIS 7.0에서 통합 모드는 ASP.NET 동시에 요청을 실행하는 수를 제한 . 요청이 비동기 인 경우에만 차이점은 입니다 (요청에 비동기 처리기가 있거나 의 모듈이 비동기 적으로 으로 완료 됨). reqeusts 동기이다 분명히 있다면, 동시에 요청을 실행하는 수는 스레드 수 동시에 요청을 실행과 동일하지만, 요청이 비동기 을하는 경우 다음 두 숫자 당신이 할 수 있었던 매우 다를 수 있습니다 에는 스레드보다 훨씬 더 많은 권한이 있습니다.

기본적으로 요청이 동기식 인 경우 요청 당 동일한 스레드 수입니다. 다양한 parameters 여기를 참조하십시오.

4

내 블로그 ASP.NET Performance-Instantiating Business Layers

제목은 질문과 일치하지 않는 블로그 게시글이되는 설명했지만 나는 IIS가 요청을 처리하는 방식을 설명하고 당신이 답을해야합니다 생각합니다.

기사에서 인용 한

IIS는이 작업자 프로세스에 이상 손을 당신의 응용 프로그램에 대한 요청을 필드. 의 작업자 프로세스가 Global 클래스 ( HttpApplication 유형)의 인스턴스와 인스턴스를 만듭니다. 이 시점부터 에 ASP.NET 응용 프로그램의 일반적인 흐름이 발생합니다 (ASP.NET 파이프 라인).그러나, 당신이 알고 이해 에 필요한 작업자 프로세스가 가의 인스턴스를 유지 (정말 IIS로 생각)이다 당신의 같이 HttpApplication (당신의 글로벌 클래스의 인스턴스) 살아, 다른 요청을 필드하기 위해 . 사실 그것은 기본적 하여 만들 것이며 요구 (게으른 인스턴스화) 부하에 귀하의 웹 사이트가 다른 요소를 수신 요청의 수를 따라하면, 당신의 글로벌 클래스의 10 개 경우 최대 캐시합니다. 위 그림 1에서 ASP.NET 응용 프로그램의 인스턴스 은 빨간색 상자로 표시됩니다. 거기에 에 의해 캐시 된 이들 중 최대 수는 일 수 있습니다. 실제로는 스레드이며 작업자 프로세스에는 이 생성되어 캐시되며 각 스레드에는 자신의 Global 클래스 인스턴스가 있습니다. 각 스레드는 동일한 앱 도메인 에 있습니다. 따라서 응용 프로그램에있을 수있는 모든 정적 고정 클래스 은 스레드 또는 응용 프로그램 인스턴스에서 공유됩니다.

나는 당신이 그 기사를 읽고 당신이 가질 수있는 질문에 답 해줄 것을 제안한다. 커널에서 일어나는 일에 대해 이야기하지 않거나 참여하는 다양한 구성 요소에 대해 자세히 설명하지 않기 위해 의도적으로 기사를 간단하게 작성했습니다. 간단하게 유지하면 사람들이 개념을 훨씬 잘 이해할 수 있습니다 (필자는 느낌이 듭니다).

나는 여기에 다른 몇 가지 질문을 답변 해 드리겠습니다 : 스레드 할당이 IIS7으로 발생하는 방법을 특정 알고리즘

  1. 있습니까?

아니요, 모든 의도는 임의적입니다. 이것은 제가 지적한 기사에서 설명됩니다. 캐시 된 스레드를 사용할 수 있으면 II가이를 사용할 것입니다. 그렇지 않다면 새로운 쓰레드를 생성하고 HttpApplication (Global)의 인스턴스와 인스턴스를 생성하고 모든 컨텍스트를 할당합니다. 그래서 바쁜 사이트에서는 같은 스레드가 요청을 처리하는 것을 볼 수 있습니다. 그러나 보장은 없습니다. 하나 이상의 자유 스레드가있는 경우 IIS는 해당 요청을 처리하기 위해 임의로 스레드를 선택합니다. 그다지 바쁜 사이트조차도 요청에 오랜 시간이 걸리면 IIS가 다른 들어오는 요청을 처리 할 수 ​​있도록 새 스레드를 만들어야합니다.

  1. 가능한 최대 스레드 수는 얼마입니까?

예 (일반적으로 문서에서 설명 됨)는 작업자 프로세스 당 10 스레드입니다. 이 조정할 수 있지만 매우 많은 바쁜 웹 사이트에서 일한 적이 없어. 핵심은 애플리케이션이 최대한 빨리 응답하도록하는 것입니다. 응용 프로그램에 여러 작업자 프로세스가 할당 될 수 있으므로 (응용 프로그램 풀에서 구성됨) 사용중인 사이트에서 실제로 응용 프로그램에 대해 여러 작업자 프로세스가 필요하지만 필요한 하드웨어 (CPU 코어 및 메모리)가 있음을 의미합니다.

스레드 대신 ID의 이름을 가질 수 단지 숫자 스케줄러는 Quartz.net하고 ID는 "Scheduler_Worker-10"로 표시하고 있지. 스레드에 이름이 할당 된 경우 ID 대신 해당 이름이 표시됩니다.물론 IIS 용 스레드는 IIS를 만들지 않습니다. 나도 몰랐다. (Quartz에 대해서도 모른다.) 그래서 나는 그것에 대해 모른다. 그러나 나는 그럴 것 같아.

관련 문제