Слишком много фьючерсов - PullRequest
5 голосов
/ 05 сентября 2011

У меня есть функция, которая принимает 2 функции: одна отслеживает определенное событие, а другая - фактически выполняет всю работу, каждая запускается в будущем, как только событие возвращается в исходное состояние. Поток вызывающего абонента сигнализирует об остановке рабочего будущего.если рабочий поток завершает работу до того, как событие получено, вызывающий поток сигнализирует об остановке наблюдателю, а затем возвращает вызывающий.

Это работает нормально, но дело в том, что рабочая функция, выполняющая фактическую работу, может / должна проверитьдругие события в будущем, каждый раз, когда мне нужно следить за определенным событием, я запускаю 2 дополнительных фьючерса.Вопрос в том, есть ли ограничение на количество макс фьючерсов?У меня может быть 60 фьючерсов за раз?Будет ли пул потоков расти по мере необходимости?и так как они работают в пуле потоков, я предполагаю, что они не слишком дорогостоящие создания?

1 Ответ

5 голосов
/ 06 сентября 2011

Все зависит от Исполнителя .Предположим, что вы создали Executor с Executors.newFixedThreadPool (n) и отправили в него n * 100 задач, будет не более n потоков работающих .

Если вы используете будущую функцию Clojure , она отправит ваши задачи в clojure.lang.Agent.soloExecutor .SoloExecutor создается с Executors.newCachedThreadPool (threadFactory) , поэтому он будет повторно использовать потоки и запускать как можно больше.

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