2.2 Пул потоков

В eDirectory из соображений производительности поддерживается режим многопоточности. Если в режиме многопоточности система занята, то для обработки нагрузки создаются дополнительные потоки, а работа некоторых потоков прекращается, чтобы устранить непроизводительную нагрузку. Часто создавать и удалять потоки неэффективно и затратно. Вместо того чтобы создавать и удалять новые потоки для каждой задачи, в пуле запускается и находится несколько потоков. Система распределяет потоки из пула потоков на несколько задач по мере необходимости. Задачи помещаются в очереди двух типов:

  • Задачи, для которых необходимо немедленное планирование, помещаются в очередь 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 соответственно.