Реализация пулов потоков

Мне было интересно, знает ли кто-нибудь хорошие ресурсы для исследования того, как были реализованы пулы потоков. Меня попросили определить алгоритм, который динамически регулирует максимальный размер пула потоков. Большинство ресурсов определяют обстоятельства, в которых вам нужен пул потоков, т. е. задачи недолговечны, но в этой проблеме обстоятельства более разнообразны. Более длинные задачи, а также короткие, некоторые из них интенсивно используют процессор, некоторые часто простаивают.

Мой первый ответ был: «Вы, вероятно, не должны использовать пул потоков», но я думаю, что у меня должен быть реальный ответ.

Одна из моих мыслей заключалась в том, чтобы иметь эвристику для наблюдения за системными ресурсами (ЦП, память) и соответствующим образом регулировать размер. Или я мог бы отслеживать потоки, чтобы увидеть, сколько времени они занимают и сколько времени


person Dave    schedule 16.03.2012    source источник
comment
Проект Smart Thread Pool в codeproject довольно сложен, но (IIRC ) у него есть все функции, о которых вы говорите.   -  person Mike Bailey    schedule 16.03.2012
comment
Вы должны добавить тег .NET. Неуправляемые потоки настолько дешевы, что этот слой материала в значительной степени избыточен. Если неуправляемый, просто добавьте 256 потоков в рабочую очередь на случай, если большое количество будет заблокировано.   -  person Martin James    schedule 16.03.2012


Ответы (1)


Вы можете использовать класс SelfTuningExecutors библиотеки there-concurrent. У меня была такая же потребность, и я решил реализовать расширение JDK ThreadPoolExecutor, которое могло бы адаптироваться к различным типам задач. Вы можете проверить эту страницу ссылка

person Alfredo Diaz    schedule 17.04.2014