2.2 Thread-Pool

Aus Gründen der Leistungsverbesserung arbeitet eDirectory mit mehreren Threads. Beim Arbeiten mit mehreren Threads werden bei ausgelastetem System weitere Threads zur Verarbeitung der Last erstellt. Einige Threads werden beendet, um zusätzlichen Overhead zu vermeiden. Ein häufiges Erstellen und Vernichten von Threads ist ineffizient und kostenintensiv. Statt für jede Aufgabe neue Threads zu erzeugen und wieder zu vernichten, werden mehrere Threads gestartet und in einem Pool organisiert. Das System weist die Threads aus dem Thread-Pool je nach Bedarf verschiedenen Aufgaben zu. Die Aufgaben werden in zwei Arten von Warteschlangen gehalten:

  • Aufgaben, die eine sofortige Planung erfordern, werden in die Warteschlange „Bereit“ gestellt.

  • Aufgaben, die zu einem späteren Zeitpunkt geplant werden müssen, werden in die Warteschlange „Wartet“ gestellt.

Der Thread-Pool wird nicht von allen Modulen verwendet. Die tatsächliche Anzahl der Threads für den Prozess übersteigt die im Thread-Pool vorhandene Anzahl. Beispielsweise verwaltet FLAIM die eigenen Hintergrund-Threads separat.

Durch Ausführen des Befehls ndstrace -c threads werden folgende Poolstatistiken zurückgegeben:

  • Gesamtzahl der erzeugten, beendeten und ruhenden Threads.

  • Gesamtzahl der aktuellen Worker-Threads und höchste Anzahl der Worker-Threads.

  • Anzahl der Aufgaben und höchste Anzahl der Aufgaben in der Warteschlange „Bereit“.

  • Mindest-, Höchst- und Durchschnittsdauer in der Warteschlange „Bereit“ in Mikrosekunden.

  • Aktuelle Anzahl und Höchstzahl der Aufgaben in der Warteschlange „Wartet“.

Beispiel für einen Thread-Pool:

Folgende Parameter sind für Thread-Pools verfügbar:

  • n4u.server.max-threads: höchste Anzahl an Threads, die in einem Pool verfügbar sein können.

  • n4u.server.idle-threads: höchste Anzahl an ruhenden Threads, die in einem Pool verfügbar sein können.

  • n4u.server.start-threads: Anzahl der gestarteten Threads.

Führen Sie die Befehle ndsconfig get und ndsconfig set aus, um die Größe des Thread-Pools abzurufen bzw. festzulegen.