Исправлен пул потоков Java Executors, не использующий все потокиJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Исправлен пул потоков Java Executors, не использующий все потоки

Сообщение Anonymous »

Справочная информация. Мы некоторое время откладывали реализацию задачи по архивированию данных, поэтому нам необходимо архивировать около 104 миллионов записей.
Процесс архивирования: мы разбили 104 миллиона записей на фрагменты по 500 (то есть около 208 000 фрагментов), каждый из которых занимает около 500 секунд (чуть больше 8 минут) на обработку. Они разделены на фрагменты, поскольку цель задачи — сжать старые файлы документов для экономии дискового пространства, а сжатие tar-файла с сотнями документов дает гораздо лучшую степень сжатия, чем сжатие каждого файла по отдельности. Обработка одного фрагмента за раз заняла бы слишком много времени, поэтому мы воспользовались фиксированным пулом потоков из Executors:

Код: Выделить всё

Executors.newFixedThreadPool(100)
104 миллиона записей полностью считываются в память за один раз. В результате для каждого фрагмента из 500 записей создается вызываемый объект, который немедленно передается в фиксированный пул потоков ExecutorService.
Проблема: несмотря на то, что он имеет много тысяч задачи, ожидающие выполнения в своей очереди, он не использует 100 потоков. По какой-то причине он использует только 8 потоков, а это означает, что вместо 12 дней на обработку всего потребуется около 150 дней.
Почему бы ему не использовать все 100 тем?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ll-threads
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»