2010-06-20 3 views
3

В .NET при выполнении асинхронного вызова я понимаю, что этот вызов разрешен в отдельном потоке, что не блокирует исходный поток, где был выполнен вызов.Механика асинхронных потоков

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

ответ

2

Я считаю, что эта статья MSDN должна отвечать на все ваши вопросы. Обратите внимание, что большая часть вашей интуиции на самом деле правильная. Все, что вам нужно сделать, это исследовать детали.

Programming the Thread Pool in the .NET Framework

+0

Чтобы быть более конкретным, асинхронный ввод-вывод находится в очереди на порт завершения ввода-вывода, который является частью пула потоков .NET. Процедура завершения обрабатывается потоком пула потоков. Асинхронные вычисления просто запускаются в потоке пула потоков. IIRC. :) –

+0

@Stephan - Вы действительно правильно помните. Я чувствовал, что эта статья соответствует законопроекту в целом, поскольку «ThreadPool» - это то место, где происходит вся магия. – ChaosPandion

0

Я предполагаю, что .NET Framework использует ThreadPool для чего-либо асинхронным, если вы специально не создавать и начать новую тему самостоятельно.

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