Практична ли эта идея проекта Java? (Планировщик потоков и Оптимизация роя частиц)

В многоядерном блоке решения планировщиков потоков Java довольно произвольны, он назначает приоритеты потоков на основе того, когда был создан поток, из какого потока он был создан и т. Д.

Идея состоит в том, чтобы запустить процесс настройки с использованием pso, который бы произвольно устанавливал приоритеты потоков, а затем в конечном итоге достигал оптимальных приоритетов, где функция пригодности - это общее время выполнения программы?

Конечно, будет больше параметров, например, приоритеты будут смещаться во время выполнения, чтобы найти оптимальную функцию приоритета.

Насколько практично, интересно звучит идея? и любые предложения. Просто несколько предысторий, я уже несколько лет программирую на java/c/ C++ с различными проектами, другой альтернативой будет создание планировщика потоков на основе этого в c, где планировщиком потоков по умолчанию является ОС.

2 ответа

Решение

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

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

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

Исходя из моего личного субъективного опыта, большинство проблем с производительностью в программном обеспечении можно решить, улучшив одну узкую область, которая составляет 90% замедления. Этот оптимизатор может помочь выяснить это. Однако я не уверен, насколько стратегия планирования может улучшить общую производительность.

Не расстраивайтесь, хотя! Я просто говорю из воздуха. Звучит весело, так почему бы просто не поиграть с ним в любом случае:)

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

Проблема в том, что для большинства нетривиальных программ их производительность будет частично зависеть от конкретных данных, с которыми они работают. Даже если вы найдете оптимальный способ планирования потоков для одного набора данных, нет абсолютно никакой гарантии, что это улучшит скорость для другого. В большинстве случаев выполнение долгой и трудной оптимизации каждый раз, когда они захотят сделать новый выпуск, не будет стоить его разработчикам, за исключением, возможно, больших вычислительных усилий (когда программы могут быть настроены вручную и не записаны в Ява в любом случае).

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

Я думаю, что это несколько субъективный вопрос, но в целом нет, не думаю, что это сработает.

Другие вопросы по тегам