Wpis z mikrobloga

Mam pytanie odnośnie wątków w WebApi w .Net Core.

Co się dzieje gdy mamy jakiś endpoint synchroniczny ("normalny") i powiedzmy w jednym momencie 20 osób wykonuje requesta pod tego endpointa? Co się wtedy dzieje? Czy każdy request jest wtedy kolejkowany i dodatkowo tworzą się nowe wątki do obsługi żądań? Jeśli tak to jak to się ma do przełączania kontekstu pomiędzy wątkami, tzn, że kontekst jest przełączany nawet na wątki, które obsługują zakolejkowane requesty? Czy dodatkowo zakolejkowanymi requestami zajmują się też inne rdzenie?

Przyznam, że im więcej o tym czytam tym mam większy mętlik w głowie.

#programowanie #dotnet #csharp #webdev
  • 3
@maestrozo: To dosc szeroki temat, swietne omowienie jest TUTAJ

W duzym skrocie: myslenie o watkach w .NET Core jest dosc egzotyczne, programowanie asynchroniczne nie ma tak naprawde NIC wspolnego z watkami. Concurrency to cos zupelnie innego niz parallelism.

Watki w zaden sposob nie sa tworzone przy kazdym requescie. Bylby to straszny antypattern i latwo by mozna bylo udupic serwer. Nie ma zadnego sensu spawnowac wieksza ilosc watkow niz ilosc rdzeni logicznych,
@maestrozo: W ASP.NET Core nie używasz wątków tylko tasków (System.Threading.Tasks) i w kontekście obsługi asynchronicznej myśl o taskach nie wątkach. "Przerobieniem" tasków na wątki zajmuje się odpowiednia biblioteka. Task do specjalna abstrakcja, wprowadzona właśnie po to, aby programiści nie musieli zajmować się niskopoziomowymi aspektami jeśli nie muszą.

Poza tym asynchroniczność != równoległe przetwarzanie. W dużym uproszczeniu asynchroniczność (np. w API) pozwala na nieblokowanie głównego wątku aplikacji przy obsłudze requestów HTTP (są