Avec Visual Studio 2015, dans un nouveau projet C++ vide, créez les éléments suivants pour l'application Console:
int main() {
return 0;
}
Définissez un point d'arrêt sur le retour et lancez le programme dans le débogueur. Sur Windows 7, à partir du point d'arrêt, ce programme n'a qu'un seul thread. Mais sur Windows 10, il a cinq (!) Threads: le thread principal et quatre "threads de travail" en attente sur un objet de synchronisation.
Qui démarre le pool de threads (ou comment le savoir)?
Crystal ball indique que la fenêtre Débogage> Windows> Threads affiche ces threads à ntdll.dll!TppWorkerThread
. Assurez-vous d'activer Microsoft Symbol Server pour le voir vous-même, utilisez Outils> Options> Débogage> Symboles.
Cela se produit également dans VS2013, donc il n'est certainement pas causé par les nouvelles fonctionnalités de diagnostic VS2015, la supposition de @ Adam ne peut pas être correcte.
TppWorkerThread () est le point d'entrée pour un thread de pool de threads. Lorsque j'ai défini un point d'arrêt avec Debug> New Breakpoint> Function Breakpoint sur cette fonction. J'ai eu la chance de capturer cette trace de pile pour le 1er thread threadpool lorsque le 2ème thread threadpool a commencé à s'exécuter:
ntdll.dll!_NtOpenFile@24() Unknown
ntdll.dll!LdrpMapDllNtFileName() Unknown
ntdll.dll!LdrpMapDllSearchPath() Unknown
ntdll.dll!LdrpProcessWork() Unknown
ntdll.dll!_LdrpWorkCallback@12() Unknown
ntdll.dll!TppWorkpExecuteCallback() Unknown
ntdll.dll!TppWorkerThread() Unknown
kernel32.dll!@BaseThreadInitThunk@12() Unknown
ntdll.dll!__RtlUserThreadStart() Unknown
> ntdll.dll!__RtlUserThreadStart@8() Unknown
De toute évidence, le chargeur utilise le pool de threads sur Windows 10 pour charger les DLL. C'est certainement nouveau :) À ce stade, le thread principal s'exécute également dans le chargeur, la concurrence au travail.
Windows 10 profite donc de plusieurs cœurs pour initialiser le processus plus rapidement. C'est vraiment une fonctionnalité, pas un bug :)
C'est le pool de threads par défaut. https://docs.Microsoft.com/en-us/windows/desktop/procthread/thread-pools
Chaque processus a un pool de threads par défaut.