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