2.2 スレッドプール

eDirectoryはパフォーマンスの理由でマルチスレッドになっています。マルチスレッドでは、システムがビジーの場合、負荷に対応するためより多くのスレッドが作成され、余分なオーバーヘッドを避けるためにいくつかのスレッドが終了されます。スレッドを頻繁に作成したり破棄したりするのは非効率で高くつきます。タスクごとに新しいスレッドを生成し破棄するのではなく、多くのスレッドが開始されプールに置かれます。システムは、必要に応じてスレッドプールからスレッドをタスクに対して割り当てます。タスクは2種類のキューに保持されています:

  • すぐにスケジューリングが必要なタスクは、Readyキューに保持されます。

  • 後でスケジューリングが必要なタスクは、Waitingキューに保持されます。

すべてのモジュールがスレッドキューを使用するわけではありません。プロセスに対するスレッドの実際の数は、スレッドプールに存在する数よりも多くなります。たとえば、FLAIMは自身のバックグラウンドスレッドを単独で管理します。

ndstrace -c threadsコマンドを実行すると、次のスレッドプールに関する統計が返されます。

  • 生成されたスレッド、終了されたスレッド、およびアイドル状態にあるスレッドの合計数。

  • 現時点でのワーカスレッドの合計数およびワーカスレッドのピーク数。

  • Readyキュー内のタスクの数と、タスクのピーク数。

  • Readyキューで費やされる最大、最小および平均のマイクロ秒数。

  • Waitingキュー内の現在および最大のタスク数。

サンプルスレッドプールの例:

特定のスレッドプールパラメータがあります。

  • n4u.server.max-threads: プール内の利用可能なスレッドの最大数。

  • n4u.server.idle-threads: プール内の利用可能なアイドルスレッドの最大数。

  • n4u.server.start-threads: 開始されたスレッドの数。

ndsconfig getおよびndsconfig setコマンドを実行し、スレッドプールのサイズを取得し設定します。