В чем разница между потоком и фоновой работой? - PullRequest
0 голосов
/ 04 ноября 2010

Это ссылка на статью ' Упрощение асинхронного программирования с помощью задач ', опубликованную в журнале MSDN, сентябрь 2010 г.

В этой статье автор выдвинул проблему загрузки файла с помощьюWebClient с веб-страницы, использующей HTTP.

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

Далее автор объясняет, что другой стратегией для решения проблемы является созданиеприложение на основе событий.WebClient реализует асинхронные операции через шаблон на основе событий.Я с автором до сих пор.

Затем он объясняет: «Эта реализация решает проблему одного из неэффективного решения, основанного на потоке: ненужной блокировки потока.Вызов async немедленно возвращается и не блокирует ни поток пользовательского интерфейса, ни поток пула потоков. Процесс выполняется в фоновом режиме '.

Что именно здесь подразумевается под словом ' background '?Чем он отличается от потока?Спасибо

1 Ответ

1 голос
/ 04 ноября 2010

" Background " в этом контексте представляет собой Поток, специально созданный для обработки задачи блокировки. Он ничем не отличается от ThreadPool Thread, за исключением того факта, что он не является частью пула.

Избегается использование ThreadPool, поскольку он может выделять только ограниченное количество потоков (MSDN определяет это как 250 рабочих потоков на процессор и 1000 потоков завершения ввода / вывода). Это ограничение объясняет, почему допустимо делать несколько блокирующих вызовов для потоков ThreadPool, но если вы делаете много блокирующих вызовов из пула, он достигнет точки, когда очередь заданий для ThreadPool начнет резервное копирование из-за отсутствия доступных рабочие и производительность ухудшается. Вы также можете увеличить количество доступных потоков в ThreadPool, но это сопровождается собственным снижением производительности, поскольку каждый поток имеет свое собственное пространство стека, выделенное из памяти.


Для тех, кто читает, статья Наира упоминается здесь: http://msdn.microsoft.com/en-us/magazine/ff959203.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...