У меня есть Java-приложение, которое запускает потоки для выполнения некоторой работы по N раз для каждого потока, и может быть настроено количество потоков.
Каждая итерация задания для каждого потока занимает от 20 секунд до 1-1,5 минут. Каждый поток должен выполнить около 25000-100000 итераций для этой работы.
Таким образом, ранее добавленные задания имеют больше «выполненных заданий» и имеют более высокий приоритет (как я думаю для JVM, но приоритет не настроен, и они имеют равный приоритет программно). Но мне нужны потоки, чтобы делать работу равномерно после добавления некоторых новых задач.
Например, есть 5000 потоков для выполнения 100 заданий за 100000 итераций:
- Старая работа # 1 делает это
- Старая работа # 2 делает это
- ...
- Старая работа # 100 делает это
Но когда я добавлю, например, задание № 101, я увижу, что потоки запускают его не так быстро, как первые задания.
Я использовал yield () и sleep (50), но это не очень хорошие результаты.
Не могли бы вы сказать мне, что я делаю неправильно и как добиться превосходной производительности для слишком большого количества потоков?