Używanie async/await w małych aplikacjach

0

Pisząc małe mam na myśli te o małym ruchu. Na SO można przeczytać, że:
Choose async if your application benefits from very high levels of concurrency (100+). Most applications do not have such high levels, or their back-end services would not sustain such an amount of load. No point in making the web app scale but overload the back-end. All systems in the call chain must benefit from a high degree of concurrency in order for async to be beneficial.
Czyli nie warto pisać asynchronicznego kodu w małych aplikacjach (webowych), dobrze rozumiem? Kiedyś już o to pytałem, ale dalej nie łapię.

3

Warto pisac nawet w malych jesli nie wymaga to nadmiaru dodatkowej pracy. Aplikacja zawsze moze sie rozrosnac i miec wiecej obciazen, i w takiej sytuacji zawsze lepiej miec juz wsparcie dla asynchronicznosci niz zmieniac wszystko.

2

In a web app that sees a large number of concurrent requests at start-up or has a bursty load (where concurrency increases suddenly), making web service calls asynchronous increases the responsiveness of the app. An asynchronous request takes the same amount of time to process as a synchronous request. If a request makes a web service call that requires two seconds to complete, the request takes two seconds whether it's performed synchronously or asynchronously. However during an asynchronous call, a thread isn't blocked from responding to other requests while it waits for the first request to complete. Therefore, asynchronous requests prevent request queuing and thread pool growth when there are many concurrent requests that invoke long-running operations.

https://docs.microsoft.com/en-us/aspnet/web-forms/overview/performance-and-caching/using-asynchronous-methods-in-aspnet-45

Generalnie przy małej aplikacji raczej nie odczujesz różnicy ale przy dużej możesz uniknąć np 503 :P

1

To zależy ( jak zwykle :)), najlepiej to byłoby to zmierzyć na prawdziwej aplikacji pod spodziewanym obciążeniem.
Z jednej strony async/await umożliwia obsłużenie większej ilości requestów, z drugiej strony każdy request z asyn/await ma większe zużycie CPU i pamięci. Więc jak nasza mała aplikacja jest na słabym serwerze, to teoretycznie może się zdarzyć że wersja z async/await będzie mogła obsłużyć mniejszą liczbę requestów bo pierw uderzy w limit CPU/pamięci niż wyczerpie pule wątków. W net core async/await został bardzo zoptymalizowany, tak by narzut był naprawdę minimalny na CPU/pamięc.

Także w ciemno jeśli trzeba by było podjąć decyzję bez żadnych pomiarów :
-> net framework -> nie używać async/await
-> net core -> używać async/await

1 użytkowników online, w tym zalogowanych: 0, gości: 1