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