2013-02-22 9 views
6

Ich habe das Concurrency Visualizer-Tool in Visual Studio verwendet, um das Threading in einem WPF-Projekt zu verstehen, an dem ich gerade arbeite. Die Anwendung ist nicht stark multi-threaded, alle Multi-Threading ist nur um zu vermeiden, den UI-Thread zu blockieren. Als ich den Concurrency Visualizer lief, war ich sehr überrascht, ungefähr 50+ Threads zu sehen! Um die Dinge verwirrender zu machen, verbrachten fast alle dieser 50+ Threads ihre gesamte Zeit in "Synchronisation", die, soweit ich weiß, "blockiert" ist.Concurrency Visualizer - Grundlegendes WPF/CLR-Threading

Als ein Experiment erstellte ich ein neues leeres WPF-Anwendungsprojekt und führte es mit dem Concurrency Visualizer aus, wieder zu meiner Überraschung, eine Anwendung, von der ich erwartete, dass sie einen einzigen Hauptthread und vielleicht ein oder zwei weitere für die Garbage Collection hatte oder anderes CLR-Zeug, entpuppt sich als 10 Threads!

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

So sind meine Fragen:

  1. Warum gibt es so viele Threads in einer sehr einfachen Anwendung?
  2. Was sind im Allgemeinen die Funktionen dieser Gewinde?
  3. Warum verbringen sie fast ihre ganze Zeit "Synchronisation"?
  4. Empfehlungen für ein Buch/eine Website, die dieses Thema behandelt?

Antwort

0

Es gibt eine gute Antwort auf diese Frage ist hier, von Jerry Bullard: 19 Threads for WPF Application

Also, neben der WPF UI und Rendering-Threads, gibt es verschiedene Arten von .NET-Themen: Finalizerthread, GC, Debugger, Timer-, Threadpool-, Primär- und Hintergrund-Threads. Threadpool hat mindestens zwei Threads. Dies alles gibt uns ein Minimum von 10 Threads (genau wie in Ihrem Bildschirmschoner).