2017-01-19 3 views
0

Я работаю над Java-приложением, которое работает на USB-накопителе. Он загружает несколько файлов с сервера на палочки и расшифровывает их. Каждый файл обрабатывается в своем потоке. Из-за ошибки в моей предыдущей реализации количество потоков не было ограничено, в результате чего некоторые файлы заканчивались размером 0 КБ, когда количество файлов было достаточно высоким (в нашем тесте у нас было 26 небольших файлов, по несколько КБ каждый) , Анализ показал, что загрузка не удалась в этом случае, то есть дешифрование не имело ничего общего, поскольку файлы были пустыми. Типичное количество неудачных загрузок в случае было 6. Исключения не были зарегистрированы. Я также проверил весь процесс с приложением, запущенным на компьютере, и загружаемыми там файлами, но проблема в этом случае не появлялась (с использованием Windows 7 и SSD-диска).Параллельный файл скачать на USB-накопитель в Java

Перейдя на фиксированный пул потоков с 10 потоками, проблема, похоже, исчезает. Тем не менее, я хочу быть уверенным, что проблема не появится снова в какой-то момент в будущем, но я хочу сохранить пул потоков, поскольку он явно ускоряет весь процесс. Вопрос в следующем: как быть уверенным, что я не использую слишком много потоков? Предполагается, что реализация будет работать как с USB 2.0, так и с 3.0 палочками.

ответ

1

26 не большое количество потоков. Если среди 26 нитей 6 не удалось выполнить свою работу, у вас определенно есть ошибка в вашей программе. Но ни вы, ни мы не знаем, что такое ошибка, поэтому мы не можем сказать, будет ли эта ошибка отображаться в 10 потоках. Хуже всего то, что диагностики нет. Вы должны исправить свою первоначальную программу, вставить диагностику повсюду, найти ошибку и затем исправить ее. После этого играйте с размером потока и посмотрите, влияет ли это на общее время загрузки. Это может случиться, что 3 или более потока не имеют преимуществ перед 2 потоками.