2013-02-22 10 views
6

Ho utilizzato lo strumento Concurrency Visualizer in Visual Studio per ottenere una comprensione del threading in un progetto WPF su cui sto lavorando. L'applicazione non è molto multi-thread, tutto il multi-threading serve solo a evitare il blocco del thread UI. Quando ho eseguito il Concurrency Visualizer sono rimasto molto sorpreso di vedere circa 50+ thread! Per rendere le cose più confuse, quasi tutte quelle discussioni di oltre 50 anni, hanno trascorso tutto il loro tempo in "Sincronizzazione", che è "bloccato" per quanto ho capito.Concurrency Visualizer - Informazioni sul threading WPF/CLR

Come esperimento ho creato un nuovo progetto di applicazione WPF vuoto e l'ho eseguito con Concurrency Visualizer, ancora una volta con mia sorpresa, un'applicazione che mi aspettavo di avere un singolo thread principale e forse uno o due in più per la garbage collection o altri contenuti CLR, risulta avere 10 thread!

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

Quindi le mie domande sono:

  1. Perché ci sono così tante discussioni in un'applicazione molto semplice?
  2. In generale quali sono le funzioni di questi thread?
  3. Perché stanno spendendo quasi tutto il loro tempo "Sincronizzazione"?
  4. Qualche raccomandazione per un libro/sito web che copre questo argomento?

risposta

0

C'è una buona risposta per questa domanda qui, da Jerry Bullard: 19 Threads for WPF Application

Così, oltre il WPF UI e le discussioni di rendering, ci sono diversi tipi di discussioni .NET: finalizzatore, GC, debugger, timer, threadpool, thread primari e di sfondo. Threadpool ha almeno due thread. Tutto questo ci dà un minimo di 10 thread (proprio come nel tuo screenshoot).