간단하게 설명하자면,
비동기: 함수가 끝났는지 신경쓰지 않고 바로 다음 줄 실행
동기: 함수가 끝난후 다음줄 실행
IIS(웹서버)에서 ASP.NET MVC의 요청을 처리하는데 사용되는 Thread Pool이 있는데, Thread Pool에는 Thread의 수가 제한되어 있다.
Request가 들어오면 Thread Pool에서 관리하고 있던 한 개의 Thread를 꺼내서 해당 Request를 처리한다.
그런데 요청에 대한 처리를 동기 작업으로 한다면 Thread는 요청이 완료될 때까지 기다려야 한다. 동시적으로 Request가 많으면 결국에는 이 모든 Thread가 사용 중이 되고, 그 이후에 또 요청하게 되면 HTTP 503(서버 사용량이 많음)을 반환하며 요청을 거부한다.
처음에 착각을 했던 것이 동기 작업으로 10초가 걸리는 작업을 비동기로 하면 시간이 더 단축된다라고 생각했다.
하지만 비동기로 변경을 한다는 것은 Thread를 더 효율적으로 사용하는 것이며 동시적으로 Request가 많을 때, 이점을 보는 것이다.
.NET에서도 Thread가 비동기 호출이 진행되는 동안은 Thread Pool로 반환되며 Thread가 Thread Pool에 있는 동안 더는 이 해당 Request와는 관련이 없다.
하지만 Sync(동기식)과 반대로 Response에 대한 처리 결과를 보장받고 처리해야 되는 서비스에는 적합하지 않습니다.
참조
https://jhyeok.com/aspnet-thread.md/
https://inpa.tistory.com/entry/WEB-🌐-비동기Async통신-동기Sync통신 [👨💻 Dev Scroll:티스토리]
https://blog.thereis.xyz/72