>  기사  >  백엔드 개발  >  ASP.NET MVC에서 비동기 프로그래밍 기술을 올바르게 사용하는 방법

ASP.NET MVC에서 비동기 프로그래밍 기술을 올바르게 사용하는 방법

黄舟
黄舟원래의
2017-09-07 13:40:422351검색

1. 동기화와 비동기란 무엇인가요?

동기화(영어: 동기화)는 시간의 일관성과 통일성을 달성하기 위해 시스템에서 발생하는 이벤트를 조정하는 것을 의미합니다. 직설적으로 말하면 여러 작업이 하나씩 실행되고 동시에 하나의 작업만 실행됩니다.

Asynchronous(영어: Asynchronization)는 CPU가 현재 요청에 대한 응답을 일시적으로 보류하고 다음 요청을 처리하며 폴링이나 기타 방법을 통해 콜백 알림을 받은 후 실행을 시작하는 것을 말합니다. 다중 스레드는 비동기 작업을 다른 스레드에 넣어 실행하고 폴링이나 콜백 메서드를 통해 완료 알림을 받습니다. 그러나 완료 포트에서는 운영 체제가 비동기 작업의 예약을 인계받고 완료되면 콜백 메서드를 트리거합니다. 하드웨어 인터럽트. 이 방법은 추가 스레드가 필요하지 않습니다.

2. ASP.NET MVC 프로젝트에서는 언제 비동기 컨트롤러를 사용해야 합니까?

2.1. ASP.NET MVC에서 비동기식을 사용해야 하는 이유는 무엇입니까?

IIS에는 새 요청이 오면 풀의 스레드가 요청을 처리하도록 예약됩니다. 그러나 동시성이 높으면 풀의 스레드가 이미 처리됩니다. 너무 많은 요청을 충족할 수 없으면 풀의 각 스레드는 바쁜 상태가 되며 요청을 처리하는 스레드는 요청을 처리할 때 차단되고 요청 큐가 가득 차면 스레드는 다른 요청을 처리할 수 없습니다. 웹 서버는 요청을 거부하고 HTTP 503 사용 중 상태가 됩니다. 네트워크 작업과 같은 높은 대기 시간을 처리하는 경우 대부분의 스레드는 상태에서 기다리며 대부분의 시간 동안 아무 작업도 수행하지 않습니다. 이러한 스레드는 비동기 프로그래밍을 사용하여 더 잘 활용될 수 있습니다.

3. 동기 및 비동기 사용 시나리오

시나리오 설명 1: 요청이 완료되는 데 2초가 걸리는 네트워크 호출을 생성하는 경우 요청은 동기적으로 실행되든 비동기적으로 실행되든 2초가 걸립니다. 그러나 비동기 호출 중에 서버는 첫 번째 요청이 완료될 때까지 기다리는 동안 다른 요청에 대한 응답을 차단하지 않습니다. 따라서 비동기 요청은 장기 실행 작업을 호출하는 요청이 많을 때 요청 큐잉을 방지합니다.

시나리오 설명 2: 각각 500, 600, 700밀리초가 걸리는 세 가지 작업이 있다고 가정합니다. 동기 호출의 경우 총 응답 시간은 1800밀리초를 약간 넘습니다. 그러나 비동기 호출(동시)인 경우 총 응답 시간은 700밀리초를 약간 넘습니다. 이는 가장 긴 작업/작업 기간이기 때문입니다. 따라서 비동기 작업 메서드는 작업이 여러 개의 독립적인 장기 실행 작업을 수행해야 하는 경우 유용합니다.

3.1 다음 조건이 충족될 때 동기 파이프라인을 사용합니다.

1) 작업이 매우 간단하거나 실행 시간이 매우 짧습니다.

2) 효율성보다 단순함이 더 중요합니다.

3) 이 작업은 많은 양의 디스크나 네트워크 오버헤드가 관련된 작업이 아닌 주로 CPU 작업입니다. CPU 바인딩된 작업에 비동기 작업 방법을 사용하면 이점이 없으며 더 많은 오버헤드가 발생합니다.



3.2. 다음 조건이 충족되면 비동기 파이프라인을 사용합니다.

1) 작업은 CPU 바인딩이 아닌 네트워크 바인딩 또는 I/O 바인딩입니다.

2), 테스트 결과 차단 작업이 웹 사이트 성능에 병목 현상을 일으키는 것으로 나타났으며, 이러한 차단 호출에 비동기 작업 방법을 사용하면 IIS가 더 많은 요청을 처리할 수 있습니다.

코드의 단순성보다 병렬성이 더 중요합니다.

3) 사용자가 장기 실행 요청을 취소할 수 있는 메커니즘을 제공하려고 합니다.



4. Q&A 세션

4.1. 비동기식은 애플리케이션의 응답성을 크게 향상시킬 수 있습니까? 그렇다면 ASP.NET MVC가 모두 비동기 컨트롤러(AsyncController)를 사용한다면 어떤 효과가 있을까요? 처리량이 많고 동시성이 높은 웹 사이트가 될까요?

코드에 비동기를 추가하는 것만으로는 실제로 성능이 향상되지 않습니다. 처리량을 실제로 향상하려면 비동기 실행이 필요한 곳(IO)을 수행해야 합니다. 비동기 컨트롤러는 주로 데이터 읽기 및 쓰기와 같은 I/O 집약적인 작업에 사용되며 작업은 상대적으로 독립적입니다. CPU 집약적인 작업은 비동기 작업에 적합하지 않습니다. 비동기식으로 처리하든 동기식으로 처리하든 CPU는 결국 채워지다. 따라서 비동기 작업은 실제로 동시성 수를 늘리는 효과를 얻을 수 있지만 사용 위치에 따라 다릅니다. 모든 비동기 컨트롤러를 사용해도 사이트 성능이 확실히 향상되지는 않습니다.

위 내용은 ASP.NET MVC에서 비동기 프로그래밍 기술을 올바르게 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.