Frage

Sehen Sie ein Programm mit einer optimalen Anzahl der Threads auf einem dedizierten Server ausgeführt wird, so dass, wenn ein Thread es keine anderen sind gesperrt ist (fast) für CPU-Zeit zu warten. tut Spin-Lock bessere Leistung als Mutex in allen möglichen Fällen in einem solchen Fall zur Verfügung stellen?

[EDIT] einige Erklärungen: da gibt es keine Konkurrenz für CPU-Zeit zwischen den Threads, kann Thread Spinlock verwendet w / o die Auswirkungen auf der anderen Thread-Performance. und Spin-Lock schaltet nicht Modus zu warten, die schwer genug sein kann (zumindest auf Fenster, IDK, wie es auf Linux führt)

War es hilfreich?

Lösung

ist Ihre Prämisse nicht sehr realistisch. Vielleicht Ihr Prozess die optimale Anzahl von Threads, hat der Rest auf das Betriebssystem viele hundert andere Themen. Einige davon könnten bereit sein, zu laufen und zu gerne einen CPU-Kern, wenn der Faden Erträge greifen. Außerdem, wenn der Thread über blockiert werden soll, ist es wahrscheinlich wegen einer Sperre von einem der anderen Threads in Ihrem Prozess gehalten geschehen. Was es während der Spin-Wartezeit lösen könnte. Die Anzahl der Gewindegänge ist es, die nicht relevant. Es ist somit nach wie vor sinnvoll, Spin-Warte machen.

Andere Tipps

Ich denke, dass spinlock wird besser funktionieren in diesem Fall sind mutexe sind nicht wirklich nötig, wenn Sie versuchen, Ihren Code zu optimieren und es hängt von unterschiedlichen Zeiten für I / O etc ... Sie kann auch einen guten Punkt, um Warte gemacht Modus.

Spinlock würde vermutlich mehr optimal sein, da es kein Übergang zum Kernel. Aber das Szenario ist so erdacht, dass ich vorschlagen würde es nie zu realem Code anzuwenden versuchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top