2013-02-22 16 views
6

Używam narzędzia Wizualizator Concurrency Visualizer w Visual Studio, aby uzyskać zrozumienie wątków w projekcie WPF, nad którym pracuję. Aplikacja nie jest mocno wielowątkowa, wszystkie wielowątkowość ma na celu uniknięcie blokowania wątku interfejsu użytkownika. Kiedy uruchomiłem wizualizator Concurrency Visualizer byłem bardzo zaskoczony, widząc około 50+ wątków! Aby sprawić, by rzeczy bardziej zagmatwane, prawie wszystkie z tych ponad 50 wątków, spędzały cały czas w "Synchronizacji", która jest "zablokowana", o ile rozumiem.Wizualizator współbieżności - Opis gwintowania WPF/CLR

W ramach eksperymentu utworzyłem nowy, pusty projekt aplikacji WPF, i uruchomiłem go z Wizualizatorem Concurrency, jeszcze raz ku mojemu zdziwieniu, aplikacji, w której spodziewałem się mieć jeden główny wątek, a może jeszcze jeden lub dwa więcej do zbierania śmieci lub inne rzeczy CLR, okazuje się mieć 10 wątków!

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

Więc moje pytania to:

  1. Dlaczego istnieją tak wiele wątków w bardzo prosty aplikacji?
  2. Zasadniczo jakie są funkcje tych wątków?
  3. Dlaczego spędzają prawie cały swój czas "Synchronizacji"?
  4. Jakieś rekomendacje dotyczące książki/strony internetowej, która obejmuje ten temat?

Odpowiedz

0

Jest dobra odpowiedź na to pytanie tutaj, Jerry Bullard: 19 Threads for WPF Application

Więc oprócz interfejsu WPF i świadczących wątków, istnieją różne typy .NET wątków: finalizatora, GC, debugger, timer, threadpool, wątki podstawowe i tła. Threadpool ma co najmniej dwa wątki. To wszystko daje nam co najmniej 10 wątków (tak jak w siatce screenów).