2013-02-22 3 views
6

J'ai utilisé l'outil Concurrency Visualizer dans Visual Studio pour comprendre le thread dans un projet WPF sur lequel je travaille. L'application n'est pas fortement multi-thread, tout le multi-thread est juste pour éviter de bloquer le thread UI. Quand j'ai couru le visualiseur concurrentiel, j'ai été très surpris de voir environ 50 fils et plus! Pour rendre les choses plus confuses, la quasi-totalité de ces 50+ threads, ont passé tout leur temps dans "Synchronisation", qui est "bloqué" autant que je comprends. En tant qu'expérience, j'ai créé un nouveau projet d'application WPF vierge, et l'ai exécuté avec le Visualiseur de Concurrency, à ma grande surprise, une application que je pensais avoir un seul thread principal, et peut-être un ou deux de plus pour le garbage collection ou d'autres choses CLR, se révèle avoir 10 fils!Concurrent Visualizer - Présentation du threading WPF/CLR

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

Mes questions sont les suivantes:

  1. Pourquoi y at-il tant de fils dans une application très simple?
  2. En général, quelles sont les fonctions de ces threads? Pourquoi passent-ils presque tout leur temps à se «synchroniser»?
  3. Des recommandations pour un livre/site Web traitant de ce sujet?

Répondre

0

Il y a une bonne réponse à cette question ici, par Jerry Bullard: 19 Threads for WPF Application

Ainsi, en plus de l'interface utilisateur WPF et rendu threads, il existe différents types de fils .NET: finaliseur, GC, débogueur, timer, threadpool, threads primaires et d'arrière-plan. Threadpool a un minimum de deux threads. Tout cela nous donne un minimum de 10 threads (comme dans votre screenhoot).