2009-04-27 3 views
1

В ASP.NET мы используем методы async, поскольку пул потоков имеет ограниченные слоты, и с помощью метода async вы освобождаете слот пула потоков, когда метод отправляется, увеличивая количество запросов, которые может обрабатывать сервер в тот же промежуток времени.Какова цель асинхронных методов? (.NET)

Я полагаю, что в других типах приложений (например, Windows Forms) ограничение потока намного выше. В таких случаях, которые являются целью асинхронных методов, когда у вас есть обе версии (sync и async)?

+0

Взгляните на основные объяснения: Donny

ответ

3

Вы можете увеличить пул рабочих потоков в конфигурации ASP.NET, и я нашел, что он очень помогает в многоядерных ящиках и IIS 6. Из того самого небольшого, что я сделал с IIS 7, кажется, что он управляет потоками намного лучше, не нуждаясь в настройке.

Более прямой вопрос о том, почему использовать оба ... вы можете Async единицу работы, чтобы вы освободили поток из пула для другой единицы работы, чтобы начать, не дожидаясь завершения другой нити. Это позволяет приложению параболизировать больше работы за один раз.

Все ваши запросы aspx исполняются в Worker Thread в любом случае, но если вы асинхронно куски вашего запроса, он может выполнять части и возвращать поток обратно в пул, а не выполнять все в вашем запросе все сразу.

Это сложно и сложно освоить, поэтому будьте осторожны. :)

http://www.guidanceshare.com/wiki/ASP.NET_2.0_Performance_Guidelines_-_Threading

Вне ASP, с окнами формы нет такого понятия, как «безграничные» пулов потоков. Когда вы вращаете больше потоков, чем может работать box/os, вы начнете переключение контекста так часто, что вы будете побеждать цель потоковой передачи. Я буду читать дальше по этому вопросу, так как это очень большая и передовая тема.

http://en.wikipedia.org/wiki/Thread_(computer_science)

+0

Хорошо, но мой вопрос касался сценария вне мира ASP.NET, где ограничение потока было намного выше (почти без ограничений) –

+0

Я ответил, прежде чем отредактировать, поэтому я ответил на вопрос ASP.NET. Вне мира аспидов одни и те же концепции по-прежнему актуальны, и нет такого понятия, как «ограничение» количества потоков. –

+0

спасибо за разъяснения –

2

В основном, это пустая трата иметь потоков, ожидающих вокруг, ничего не делая. Речь идет не о ограниченном пуле потоков, а о том, насколько большой вы можете это сделать. Это общее стремление к тому, чтобы каждый поток использовал свою максимальную мощность. Не имеет смысла, чтобы поток выходил из сети в ожидании сетевого вызова или, возможно, длинного бита ввода-вывода, когда он мог делать другие полезные вещи. Это желание определяется количественно в таких концепциях, как масштабируемость, производительность и пропускная способность, но это не обязательно чистая цель. Чистая цель - использовать ограниченные ресурсы (процессоры) для максимально возможного количества задач. Интересным контрапунктом этого является понятие распараллеливания. Цель состоит в том, чтобы правильно распределять задачи, когда у вас есть большой набор ресурсов и не обязательно столько задач.

3

Цель асинхронных методов - обеспечить более гибкое приложение. Если вы запускаете все задачи в одном потоке, приложение будет останавливаться каждый раз, когда ваш поток должен выполнять длительную синхронную операцию, потому что ваш поток ожидает завершения операции и, следовательно, не может ничего сделать. Чтобы обойти это, вы можете разблокировать эти задачи для разделения потоков с асинхронными вызовами.

Смежные вопросы