Warum sagen alle, dass SpinLock schneller ist? [geschlossen]

7

Ich habe viele Artikel und Artikel im Internet gelesen. Fast jeder und überall verpflichtet sich, dass SpinLock schneller ist für einen kurzen Durchlauf von Code, aber ich habe einen Test gemacht, und es scheint mir, dass der einfache Monitor.Enter schneller als SpinLock.Enter funktioniert (Test ist gegen .NET 4.5 kompiliert)

%Vor%

Auf einem Server mit 24 Kernen mit 2,5 GHz lieferte diese mit x64 kompilierte Anwendung die folgenden Ergebnisse:

%Vor%     
Rauf 30.01.2013, 18:39
quelle

1 Antwort

29

Sie testen gerade kein Szenario, in dem SpinLock das Threading verbessern kann. Die Kernidee hinter einem Spin-Lock ist, dass ein Thread-Context-Switch sehr teuer ist und zwischen 2000 und 10.000 CPU-Zyklen kostet. Und wenn es wahrscheinlich ist, dass ein Thread eine Sperre erhalten kann, indem er auf ein Bit wartet (sich dreht), dann können sich die zusätzlichen gebrannten Zyklen durch das Vermeiden des Threadkontextwechsels auszahlen.

Grundvoraussetzung ist also, dass das Schloss für eine sehr kurze Zeit gehalten wird, was in Ihrem Fall der Fall ist. Und dass es vernünftige Chancen gibt, dass das Schloss erworben werden kann. Was in deinem Fall nicht wahr ist, ist das Schloss stark um nicht weniger als 24 Threads bestritten. Alle drehenden und brennenden Kern ohne eine Chance, das Schloss zu erwerben.

In diesem Test funktioniert Monitor am besten, da er Threads in die Warteschlange stellt, die darauf warten, die Sperre zu erhalten. Sie werden ausgesetzt, bis einer von ihnen eine Chance hat, um die Sperre zu erhalten, die bei der Freigabe der Sperre aus der Warteschlange gelöscht wird. Ihnen allen eine faire Chance zu geben, an der Reihe zu sein und so die Chancen zu maximieren, dass sie alle gleichzeitig beenden. Interlocked.Increment ist nicht schlecht, aber kann keine Fairness-Garantie bieten.

Es kann ziemlich schwierig sein, zu beurteilen, ob Spinlock der richtige Ansatz ist, Sie müssen messen. Ein Parallelitätsanalysator ist die richtige Art von Werkzeug.

    
Hans Passant 30.01.2013 20:33
quelle