2013-02-22 2 views
6

Я использую средство визуализации Concurrency Visualizer в Visual Studio, чтобы получить представление о потоке в проекте WPF, над которым я работаю. Приложение не сильно многопоточное, все многопоточность заключается в том, чтобы избежать блокировки потока пользовательского интерфейса. Когда я запустил Visual Studio Concurrency, я был очень удивлен, увидев примерно 50+ потоков! Чтобы сделать вещи более запутанными, почти все эти 50+ потоков, проводили все свое время в «Синхронизации», которая, насколько я понимаю, «заблокирована».Concurrency Visualizer - Понимание потоков WPF/CLR

В качестве эксперимента я создал новый пустой проект приложения WPF и запустил его с помощью Visual Studio Visual Studio, к моему удивлению, приложение, которое, как я ожидал, будет иметь один основной поток и, возможно, один или два для сбора мусора или другой материал CLR, получается 10 потоков!

Screenshot of Concurrency Visualizer showing 10 threads in a simple WPF Application

Так что мои вопросы:

  1. Почему так много потоков в очень простом приложении?
  2. Вообще говоря, каковы функции этих потоков?
  3. Почему они тратят почти все свое время «Синхронизация»?
  4. Любые рекомендации по книге/веб-сайту, которая охватывает эту тему?

ответ

0

Существует хороший ответ на этот вопрос здесь, Джерри Буллард: 19 Threads for WPF Application

Таким образом, помимо WPF из пользовательского интерфейса и визуализации потоков, существуют различные типы .NET потоков: финализатора, GC, отладчик, таймер, threadpool, первичный и фоновый потоки. Threadpool имеет минимум два потока. Все это дает нам минимум 10 потоков (как и на вашем скриншоте).

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