Максимальное количество потоков для каждого процесса в Linux?

Следующий код - это образец. Вопрос, основанный на том же, вместо использования преобразования на основе IDE, есть более быстрый способ реализовать, чтобы в будущем произошли изменения, нам не нужно изменять значения снова и снова?

@Override
    public String toString() {
        return "ContractDTO{" +
                "contractId='" + contractId + '\'' +
                ", contractTemplateId='" + contractTemplateId + '\'' +
                '}';
    }
227
задан 5 December 2008 в 15:38
поделиться

5 ответов

Linux не имеет, отдельные потоки для каждого процесса ограничивают, просто предел на общее количество процессов в системе (потоки являются по существу просто процессами с общим адресным пространством на Linux), который можно просмотреть как это:

cat /proc/sys/kernel/threads-max

значение по умолчанию является числом страниц/4 памяти. Можно увеличить это как:

echo 100000 > /proc/sys/kernel/threads-max

существует также предел на количество процессов (и следовательно распараллеливает), который отдельный пользователь может создать, видеть ulimit/getrlimit для деталей относительно этих пределов.

228
ответ дан Shiva 4 November 2019 в 13:25
поделиться

Это, вероятно, не должно иметь значения. Вы собираетесь получить намного лучшую производительность, разрабатывая Ваш алгоритм для использования постоянного числа потоков (например, 4 или 8, если у Вас есть 4 или 8 процессоров). Можно сделать это с очередями заданий, асинхронным IO или чем-то как libevent.

4
ответ дан twk 4 November 2019 в 13:25
поделиться

Получать его:

cat /proc/sys/kernel/threads-max

Для установки его:

echo 123456789 > /proc/sys/kernel/threads-max

123456789 = # потоков

11
ответ дан Vincent Van Den Berghe 4 November 2019 в 13:25
поделиться

На практике предел обычно определяется стековым пространством. Если каждый поток получает стек 1MB (я не могу помнить, является ли это значением по умолчанию на Linux), то Вы, 32-разрядная система исчерпает адресное пространство после 3 000 потоков (предполагающий, что последний ГБ резервируется к ядру).

Однако Вы, скорее всего, испытаете ужасную производительность при использовании больше чем нескольких дюжин потоков. Рано или поздно Вы получаете слишком много контекстного переключения наверху, слишком много служебное в планировщике, и так далее. (Создание большого количества потоков действительно немного больше, чем ест большую память. Но много потоков с фактическим работа , чтобы сделать собирается замедлить Вас, поскольку они борются в течение доступного процессорного времени)

, Что Вы делаете, где этот предел даже релевантен?

43
ответ дан jalf 4 November 2019 в 13:25
поделиться

Используйте nbio неблокирующий ввод / вывод библиотека или что-то еще, если вам нужно больше потоков для выполнения вызовов ввода-вывода, которые блокируют

3
ответ дан 23 November 2019 в 03:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: