Ich verwende Visual Studio, um meine Multi-Thread-C++ - Anwendung zu profilieren. Von dem, was ich über Sampling-Methode gelesen habe, verstehe ich, dass es Prozessor in bestimmten Intervallen untersucht, um zu sehen, welche Funktion ausgeführt wird.Profiling Multithread-Code, wie funktioniert die Stichprobenverarbeitung
Ich bin gespannt, wie es Multi-Thread-Code behandelt. Es ist durchaus möglich, dass zwei oder mehr Funktionen gleichzeitig auf verschiedenen Threads auf verschiedenen Kernen ausgeführt werden. In diesem Fall wird der Zählvorgang für beide Funktionen inkrementiert? Ich glaube, dass das tatsächlich passiert.
Dies macht es tatsächlich schwierig, Erkenntnisse aus dem Profiling-Bericht abzuleiten. Die Funktion, die die meisten gesammelten Stichproben enthält, wird bei Ausführung auf einem Worker-Thread möglicherweise auf einem anderen Kern (als Hauptthread) ausgeführt und beeinträchtigt möglicherweise die Anwendungsleistung überhaupt nicht. Wenn es jedoch den Hauptthread ausschaltet, um seine Arbeit zu verrichten, sollte es einen beobachtbaren Einfluss auf die Leistung haben.
Gibt es eine bessere Möglichkeit, Multithread-Code zu profilieren?
Ja. Wenn sich Threads nicht auf die Leistung Ihrer App auswirken, tun Sie es falsch, und Sie wären besser dran, sie überhaupt nicht zu verwenden. Modulo die Notwendigkeit für asynchronicity zu verhindern, dass UI einfriert, aber das ist kein Nebenläufigkeit. Um herauszufinden, warum ein Multithreaded-Programm Muckeln saugt, ist ein anderes Tool erforderlich, [ein Parallelitätsanalysator] (https://msdn.microsoft.com/en-us/library/dd537632.aspx?f=255&MSPPError=-2147217396). . –