2012-08-02 5 views
5

this question에서 benefits-of-async/await-on-ASP.NET의 변형이 있습니다.ASP.NET 비동기/2 부 대기

제 생각에 비동기는 병렬 처리와 같은 것이 아닙니다. 따라서 웹 서버에서 async/await이 ASP.NET 페이지에 얼마나 많은 이익을 가져다 주는지 궁금합니다.

IIS + ASP.NET은 이미 요청에 대한 스레드를 할당하는 데 정말 능숙하지 않으며, onen 페이지가 리소스를 기다리는 중일 때 서버는 작업해야하는 다른 요청을 처리하기 위해 전환합니다.

ASP.NET에서 사용할 수있는 풀 수가 제한적입니다. 더 이상 효과적으로 사용할 수 있습니까?

위의 질문에 답하는 것을 Skeet이 지적 했으므로 우리는 UI 스레드 차단에 대해 언급하지 않습니다. 우리는 이미 멀티 스레드이며 웹 응답은 모든 요청의 작업이 완료 될 때까지 완료 할 수 없습니다 (비동기식 또는 비동기식)? 어떤 혜택이 자원의 비동기 읽기에 있습니까

(예를 들어 파일이나 DB 요청) 그것을 차단 대 ASP.NET 페이지의 :

나는 그것이이되는 귀결 어떻게 됐을까?

+0

실제로 Jon Skeet의 답변을 읽었습니까? 그는 ASP.NET에서 async를 사용할 때의 이점에 대해 설명합니다. – svick

+0

@svick : 읽어 주셔서 감사합니다. 예, 저는 Jon의 대답을 읽었습니다. 그러나 많은 경우에있어서 그는 "그것이 달려 있습니다."라고 말하는 것은 그가 할 수있는 유일한 답이라고 생각합니다. 대용량 웹 서버에서 async/await의 스레딩 영향을 이해하고 싶습니다. – n8wrl

답변

8

한 페이지가 리소스를 기다리는 중일 때 서버가 작업해야하는 다른 요청을 처리하는 것으로 전환하면됩니다.

나는 그렇게 생각하지 않는다. 나는이 경우에 매우 놀랄 것입니다. 이론적으로는 가능하지만 매우 복잡합니다.

ASP.NET에서 사용할 수있는 풀 수가 제한적입니다. 더 이상 효과적으로 사용하지 않습니까?

예, await 일 때 요청에 대한 스레드가 즉시 풀로 반환되기 때문에 그렇습니다.

우리는 이미 멀티 스레드이며 모든 요청 작업이 완료 될 때까지 웹 응답을 완료 할 수 없습니다 (비동기 여부). 맞습니까?

맞습니다. 서버 시나리오에서 async은 스레드 풀의 압력을 제거하는 것입니다.

ASP.NET 페이지에서 리소스를 비동기 적으로 읽는 것 (파일 또는 DB 요청)과 차단 (블로킹)에 이점이 있습니까?

물론입니다!

파일/서비스 호출/db 요청을 차단하면 해당 스레드는 해당 작업 기간 동안 사용됩니다. await 파일/서비스 호출/db 요청 인 경우 해당 스레드는 즉시 스레드 풀로 반환됩니다.

이 결과는 진행중인 요청을 처리 할 수 ​​있다는 것과 (a) 일부 작업을 대기하는 동안 이 아닌 스레드가 요청을 처리하고 있다는 것입니다. 원한다면 0 스레드 동시성.

작업이 완료되면 스레드 풀에서 (아마도 다른) 스레드에서 await - 메서드를 다시 시작합니다.

결론 : async은 스레드보다 크기 때문에 서버 측에서 분명히 이점이 있습니다.

자세한 정보 : 내 intro to async postthis awesome video.

+0

더 최근의 [답변] (http://stackoverflow.com/a/30574578/1497596)에서주의 할 점 : "단일 데이터베이스 백엔드로 ASP.NET MVC에 대해 이야기하고 있다면, SQL 서버 (또는 다른 고전적인 RDBMS)의 단일 인스턴스보다 훨씬 많은 동시 요청을 처리 할 수 ​​있기 때문에 "비동기"에서 확장 성 혜택을 얻지는 못할 것입니다. 그러나 백엔드가 더 현대적인 경우 - SQL 서버 클러스터, Azure SQL, NoSQL 등 - 백엔드가 확장 가능하고 확장 성 병목 현상이 IIS 인 경우 * async 확장 성 이점을 얻을 수 있습니다. " – DavidRR