Зачем использовать асинхронные запросы вместо использования большего пула потоков?

Во время технических дней здесь, в Нидерландах, Стив Сандерсон сделал презентацию о C # 5, ASP.NET MVC 4 и асинхронной сети .

Он объяснил, что, когда выполнение запросов занимает много времени, все потоки из пула потоков становятся занятыми, и новые запросы должны ждать. Сервер не справляется с нагрузкой и все тормозит.

Затем он показал, как использование асинхронных веб-запросов повышает производительность, поскольку затем работа делегируется другому потоку, и пул потоков может быстро реагировать на новые входящие запросы. Он даже продемонстрировал это и показал, что 50 одновременных запросов сначала занимали 50 * 1 с, но с асинхронным поведением всего 1,2 с.

Но после того, как я это увидел, у меня остались вопросы.

  1. Почему мы не можем просто использовать пул потоков большего размера? Разве async / await не используется, чтобы запустить другой поток медленнее, чем просто увеличить пул потоков с самого начала? Это не похоже на то, что сервер, на котором мы работаем, внезапно получил больше потоков или что-то в этом роде?

  2. Запрос от пользователя все еще ожидает завершения асинхронного потока. Если поток из пула делает что-то еще, как поток UI остается занятым? Стив упомянул кое-что о «умном ядре, которое знает, когда что-то закончено».Как это работает?

66
задан Wouter de Kort 26 February 2012 в 13:43
поделиться