2008-09-29 14 views
41

Es ist hilfreich, Threads zu benennen, damit Sie herausfinden können, welche Threads für Diagnose- und Debugging-Zwecke verwendet werden.Namenskonventionen für Threads?

Gibt es eine bestimmte Benennungskonvention für Threads in einer stark multi-threaded Anwendung, die besser als eine andere funktioniert? Irgendwelche Richtlinien? Welche Art von Informationen sollte in den Namen eines Threads eingehen? Was haben Sie über das Benennen Ihrer Threads gelernt, die anderen helfen könnten?

Antwort

39

Es gibt meines Wissens keinen Standard. Im Laufe der Zeit habe ich diese Richtlinien gefunden hilfreich zu sein: Kurznamen

  • verwenden, weil sie in einer Protokolldatei zu lange nicht die Linien machen.

  • Erstellen Sie Namen, wo der wichtige Teil am Anfang ist. Log-Viewer in einer grafischen Benutzeroberfläche haben tendenziell Tabellen mit Spalten, und die Thread-Spalte ist normalerweise klein oder wird von Ihnen verkleinert, um alles andere zu lesen.

  • Verwenden Sie nicht das Wort "Thread" im Thread-Namen, weil es offensichtlich ist.

  • machen die Thread-Namen leicht grep-fähig. Vermeiden Sie ähnlich klingende Thread-Namen

  • Wenn Sie mehrere gleichartige Threads haben, listen Sie sie mit IDs auf, die für eine Ausführung der Anwendung oder für eine Protokolldatei eindeutig sind, je nachdem, welche Protokollierungsgewohnheiten Sie verwenden.

  • Vermeiden Sie Generalisierungen wie "WorkerThread" (wie benennen Sie die nächsten 5 Worker-Threads?), "GUIThread" (welche GUI? Ist es für ein Fenster? Für alles?) Oder "Calculation" (was berechnet es ?).

  • Wenn Sie eine Testgruppe verwenden, die die Protokolldateien Ihrer Anwendung mit Thread-Namen behandelt, benennen Sie Ihre Threads nach einiger Zeit nicht um. Ihre Tester werden Sie dafür hassen. Thread-Namen in gut getesteten Anwendungen sollten da sein, um zu bleiben.

  • wenn man Fäden haben, die eine Netzwerkverbindungsdienst, versuchen, die Zielnetzwerkadresse in dem Thread-Namen (z.B. channel_123.212.123.3) aufzunehmen. Vergessen Sie jedoch nicht die Aufzählung, wenn mehrere Verbindungen zu demselben Host bestehen.

Wenn Sie viele Threads haben und vergessen haben, eine zu nennen, Ihre Log-Mechanismus sollte eine Ausgabe eine einzigartige Thread-ID statt (API-spezifisch, zB durch pthread_self Aufruf())

0

Hmmm ... In den stark multi-threaded Anwendungen, die ich geschrieben habe, hatte ich im Allgemeinen mehrere Threads, die die gleiche Funktion ausführen, also bin ich nicht sicher, dass das Benennen von Threads in diesem Szenario sehr hilfreich ist. Das heißt, ich habe jedem Thread eine Integer-ID zugewiesen, die in Protokollnachrichten gedruckt wurde, die vom Thread generiert wurden, um das Debuggen zu unterstützen.

Für andere Anwendungen, die Fäden mit gewidmet einzigartigen Aufgaben hatten, ja, ich nannte sie deskriptiv ... aber ich tat es nicht, weil es eine Thread-Anwendung war, ich tat es, weil es eine Codierung Best-Practice zu tun damit.

0

Ich neige dazu, Benennungs-Threads die gleiche wie Benennungsmethoden oder Variablen zu nähern. Wählen Sie etwas aus, das prägnant den Prozess beschreibt, für den der Thread verantwortlich ist. Ich denke nicht, dass es viele zusätzliche Informationen gibt, die Sie in einen Thread-Namen eingeben können oder sollten. Expressiv, aber knapp ist das primäre Ziel.

Die einzige Konvention könnte sein, ein inkrementiertes Suffix zu Threads hinzuzufügen, die Teil eines Pools sind.

1

Naming Threads nützlich ist und Sie sollte einer Benennungskonvention folgen, die für irgendetwas anderes, diese Variablen, Methoden oder Klassen sein würde. Benenne sie nach dem was sie tun und sei prägnant. Wenn Sie jemals auf ein Problem stoßen, das einen Thread-Dump erfordert, ist es nett, sich den Namen anzusehen und zu wissen, wo Sie in Ihrem Code nach dem Problem suchen sollten, anstatt Stack-Traces und Raten zu untersuchen.

Das einzige Unterschied ist, dass wenn mehrere Threads des gleichen Typs sind, Sie wirklich einen Index irgendeiner Art hinzufügen sollten, da Thread-Namen eindeutig sein sollten, um bestimmte APIs zu erfüllen. Es kann auch bei der Protokollierung helfen, wenn Sie den Thread-Namen anzeigen, um zu wissen, wie sich Ihre Anwendung verhält, wenn eine teilweise Ausführung in verschiedenen Threads stattfindet.

2

Während Thorstens Antwort die umfassendste Antwort ist, sollten Sie sich ansehen, wie Tomcat seine Threads benennt. Ich habe das nützlich gefunden. Wir haben mehrere Threads mit einem Quartz-Scheduler ausgeführt und viele der von Thorsten vorgeschlagenen Namensregeln waren nützlich.

Werden Sie einen Thread-Pool verwenden? Wenn ja, dann verringert dies die Wahrscheinlichkeit, dass Sie nützlichere Meta-Informationen hinzufügen können. Wenn nicht, ist der Himmel die Grenze zu wie viel nützliche Informationen Sie haben können.

1

Was:..

[Namespace] [Klasse] [. Klasse ...] [Methode] [aktuelle Thread]?

So haben Sie die Namen:

Biz.Caching.ExpireDeadItems1
Biz.Caching.ExpireDeadItems2
Biz.Caching.ExpireDeadItems3

usw., für jeden Thread.

0

Ich habe mehrere Namenskonventionen für Threads in .NET gesehen.

Einige bevorzugen die Verwendung von 't' am Anfang des Namens (ex. tMain Thread), aber ich glaube nicht, dass es einen echten Wert hat. Stattdessen verwenden Sie einfach nur beschreibende Namen (Linienvariablen) wie HouseKeeping, Scheduler und so weiter.

Verwandte Themen