내 Understading :ASP.NET 웹 응용 프로그램에서 비동기가 작동하는 방식은 무엇입니까?
비동기 스레딩 다릅니다. 비동기식에서는 단일 스레드를 사용하여 다중 스레드를 실행할 수 있습니다. .Net framework
에는 모든 새로운 http 웹 요청에 새 스레드를 할당하는 스레드 풀이 있습니다. 따라서 모든 요청은 단일 스레드에 의해 처리됩니다. 그러나 IIS
에는 자체 스레드 풀이 없으므로 CLR의 스레드 풀을 사용합니다.
웹 요청에서 새 추가 스레드를 만들면 스레드 풀에서 하나의 스레드가 손실되고 사이트 트래픽이 많은 경우 사이트 사용자는 스레드가 해제 될 때까지 대기 할 입니다. ASP.Net 앱에서 비동기 작업을 사용하는 것이 좋습니다. 비동기 작업은 기본 웹 요청이 실행되는 단일 스레드에서 실행됩니다.
비동기 작동 방식. 컨트롤러에 두 개의 독립/비동기 작업을 생성한다고 가정합니다 (T1 및 T2라고 가정). T1은 일정한 시간 간격 동안 실행 한 다음 T2를 실행합니다. 그런 다음 다시 메인 웹 요청. 그들은 타임 슬라이싱을 사용하여 CPU를 사용합니다.
Web Request -----> Single Thread Pool Thread (Main Request + T1 +T2)
=>
Execution Lifecycle --> [Main request, T1, T2, T1, Main Request, T2, T1.....]
우리는 다음 await Task.WhenAll
을 사용하는 경우 우리의 주요 스레드는 출시와 풀 스레드 다시 주어 한 번에 모든 작업이 우리가 계속 다시 우리의 스레드를 부여 완료됩니다.
내가 틀린 곳이면 먼저 내 개념을 깨끗하게 정리하십시오. 우리의 스레드가 다음 스레드에 주어진다면
- 스레드 WhenAll에 작업에 작동합니다 :
은 그 때 나는 약간 혼란이있다.
- WhenAll이 완료되거나 새로운 스레드가 무작위로 제공되면 동일한 스레드가 다시 발생합니까?
[스레드가 없습니다] (http://blog.stephencleary.com/2013/11/there-is-no-thread.html) –
왜 '스레드'가 신경 쓰입니까? 스레드가 다시 용도가 지정되면 '동일한'스레드가 계산됩니까? 이 점 중 하나는 이러한 세부 사항을 추상화하여 사용자가 신경 쓸 필요가 없도록하는 것입니다. – Milney
ASP 'SynchronizationContext' 구현을 WPF 또는 Winforms 구현과 동일하게 생각하는 것처럼 보입니다. 그것은 완전히 동일하지 않습니다. – Gusdor