2.2 Pool di thread

eDirectory è multithreading per questioni relative alle prestazioni. Nel multithreading, quando il sistema è occupato, vengono creati ulteriori thread per gestire il carico e alcuni thread vengono interrotti per evitare overhead in eccesso. La creazione e la distruzione frequente di thread sono operazioni inefficienti e costose. Anziché generare nuovi thread e distruggerli per ogni task, un numero di thread viene avviato e posizionato in un pool. Il sistema alloca i thread del pool di thread a tanti task quanti ne sono richiesti. I task sono disposti in due tipi di code:

  • I task che richiedono una pianificazione immediata risiedono nella coda Pronti.

  • I task, invece, la cui pianificazione può essere realizzata in un secondo momento risiedono nella coda In attesa.

Non tutti i moduli utilizzano il pool di thread. Il numero effettivo di thread per il processo è superiore a quello presente nel pool di thread. Ad esempio, FLAIM gestisce separatamente i propri thread in background.

L'esecuzione del comando ndstrace - c threads restituisce le seguenti statistiche del pool di thread:

  • Il numero totale di thread che vengono generati, interrotti e inattivi.

  • Il numero totale di thread di lavoro attuali e il numero massimo di thread di lavoro.

  • Il numero di task e il numero massimo di task presenti nella coda Pronti.

  • Il numero minimo, massimo e medio di microsecondi trascorsi nella coda Pronti.

  • Il numero attuale di task nella coda In attesa.

Un esempio di un campione di pool di thread:

Esistono determinati parametri del pool di thread:

  • n4u.server.max-threads: Numero massimo di thread che possono essere disponibili nel pool.

  • n4u.server.idle-threads: Numero massimo di thread inattivi che possono essere disponibili nel pool.

  • n4u.server.start-threads: Numero di thread avviati.

Eseguire i comandi ndsconfig get e ndsconfig set per recuperare e impostare la dimensione del pool di thread.