Во время Techdays здесь, в Нидерландах, Стив Сандерсон выступил с презентацией о С# 5, ASP.NET MVC 4 и асинхронном Web.
Он объяснил, что когда запросы занимают много времени, все потоки из threadpool становятся занятыми, и новые запросы должны ждать. Сервер не может обрабатывать нагрузку, и все замедляется.
Затем он показал, как использование async webrequests повышает производительность, потому что работа затем делегируется другому потоку, и threadpool может быстро реагировать на новые входящие запросы. Он даже продемонстрировал это и показал, что 50 одновременных запросов сначала заняли 50 * 1 с, но с асинхронным поведением на месте всего 1,2 с.
Но после этого у меня остались некоторые вопросы.
-
Почему мы не можем использовать больше threadpool? Не использует async/await, чтобы вызвать еще один поток медленнее, чем просто увеличить threadpool с самого начала? Не похоже, что сервер, на котором мы запускаем, вдруг получает больше потоков или что-то еще?
-
Запрос от пользователя все еще ждет завершения асинхронного потока. Если поток из пула делает что-то еще, как работает поток "UI"? Стив упомянул что-то о "умном ядре, которое знает, когда что-то закончится". Как это работает?