Ich habe Kerrisks The Linux Programming Interface: A Linux and UNIX System Programming Handbook Kapitel 31 über Threads gelesen. Das Kapitel enthält Thread-spezifische Daten (Abschnitt 31.3.4) und lokalen Thread-Speicher (Abschnitt 31.4). Die Themen wurden auf den Seiten 663-669 behandelt.Threadspezifische Daten im Vergleich zum lokalen Thread-Speicher
Thema Spezifische Daten (pthread_key_create
, pthread_setspecific
, pthread_getspecific
und Freunde) sieht mächtiger, scheint aber ein wenig umständlich zu bedienen zu sein und erscheint häufiger den Speichermanager zu verwenden.
Thread Local Storage (__thread
auf statische und globale Deklarationen) sieht ein wenig weniger leistungsfähig, da es auf Kompilierzeit beschränkt ist, aber es scheint einfacher zu sein, und scheint zur Laufzeit aus dem Speichermanager zu bleiben.
Ich könnte mich irren über die Runtime-Speicher-Manager, da es Code hinter den Kulissen sein könnte, ruft pthread_key_create
, wenn es auf __thread
Variablen trifft.
Kerrisk bot keinen Vergleich/Kontrast der beiden Strategien, und er machte keine Empfehlung, wann in einer bestimmten Situation zu verwenden.
Um einen Kontext zu der Frage hinzuzufügen: Ich werte eine 3rd-Party-Bibliothek aus. Die Bibliothek verwendet Globals, verwendet nicht Sperrung, und ich möchte es in einem Multi-Thread-Programm verwenden. Das Programm verwendet Threading, um Netzwerklatenzen zu minimieren.
Gibt es einen erfolgreichen Gewinner? Oder gibt es verschiedene Szenarien, die den Einsatz des einen oder anderen rechtfertigen?
Im Allgemeinen ist es vorzuziehen, keines von beiden zu verwenden. Warum willst du das überhaupt benutzen? –
Danke David. Es ist ein netzwerkbasiertes Multithread-Programm, das dazu beiträgt, den Durchsatz angesichts von Latenzen aufrechtzuerhalten. Ich möchte versuchen, eine 3rd-Party-Bibliothek für die Analyse, aber die Bibliothek verwendet statische globale für den Status. – jww
Hmm, chaotisch. Ich kann sehen, woher du kommst. Ideale Welt hat die Information, die durch Parameter übergeben wird. Vielleicht überlegen Sie sich eine Thread-freundlichere Bibliothek? –