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