при порождении темы, как я дросселирую максимально возможное количество? - PullRequest
1 голос
/ 30 июля 2011

Как создать потоки на максимально возможное количество при условии, что для завершения каждого потока может потребоваться разное время. Идея состоит в том, чтобы порождать максимальное количество возможных потоков, не вызывая при этом смерти.

например. Пока (порождается) порождает больше потоков;

Я пытаюсь порождать потоки, чтобы делать вызовы ejb, я хочу создать максимально возможное число, чтобы симулировать загрузку, не вызывая исключения потоков из памяти.

Ответы [ 3 ]

6 голосов
/ 30 июля 2011

Executors.newFixedThreadPool () или для более точного управления создайте свой собственный ThreadPoolExecutor .

2 голосов
/ 30 июля 2011

Фиксированного ответа нет. Вам нужно настроить количество потоков на возможности вашего хоста.

В ответ на проблему с памятью важно не только количество потоков, но и то, что они делают. Это не то же самое, если они выполняют простые вызовы или имеют дело с огромными массивами.

Относительно производительности, и если предположить, что ваш хост выделен, минимальным значением будет один поток на ядро. Учитывая, что они собираются вызывать удаленную систему, большинство этих потоков будут проводить время в режиме ожидания; в зависимости от доли простоя вы можете породить больше или меньше.

По сути, проверьте производительность вашего хоста и, соответственно, настройте номер потока.

1 голос
/ 30 июля 2011

Фреймворк Executor был процитирован здесь, и это действительно замечательный инструмент (уже добавили +1 к этому ответу).

Но я считаю, что ОП хочет - Executors.newCachedThreadPool ().

Из документов:

Создает пул потоков, который создает новые потоки по мере необходимости, но будет повторно использовать ранее созданные потоки, когда они будут доступны

Подробнее об исполнителях здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...