Процесс архивирования: мы разбили 104 миллиона записей на фрагменты по 500 (то есть около 208 000 фрагментов), каждый из которых занимает около 500 секунд (чуть больше 8 минут) на обработку. Они разделены на фрагменты, поскольку цель задачи — сжать старые файлы документов для экономии дискового пространства, а сжатие tar-файла с сотнями документов дает гораздо лучшую степень сжатия, чем сжатие каждого файла по отдельности. Обработка одного фрагмента за раз заняла бы слишком много времени, поэтому мы воспользовались фиксированным пулом потоков из Executors:
Код: Выделить всё
Executors.newFixedThreadPool(100)
Проблема: несмотря на то, что он имеет много тысяч задачи, ожидающие выполнения в своей очереди, он не использует 100 потоков. По какой-то причине он использует только 8 потоков, а это означает, что вместо 12 дней на обработку всего потребуется около 150 дней.
Почему бы ему не использовать все 100 тем?
Подробнее здесь: https://stackoverflow.com/questions/792 ... ll-threads
Мобильная версия