Как определить идеальное количество параллельных потоков Java для копирования большого набора файлов во внешнюю общую папку? - PullRequest
1 голос
/ 15 апреля 2010

Каким должно быть идеальное количество параллельных Java-потоков для копирования большого набора файлов из четырехъядерного Linux-бокса во внешнюю общую папку? Я вижу, что с одним потоком требуется очень много времени для перемещения файлов один за другим. Многопоточность улучшает производительность копирования, но я не знаю, какое должно быть точное количество потоков.

Я использую службу Java-исполнителя для создания пула потоков.

Ответы [ 2 ]

4 голосов
/ 15 апреля 2010

Абсолютно, вы должны решить это путем тестирования. Как отмечает Дмитрий, здесь задействовано много факторов. На самом деле, CPU почти наверняка не является узким местом в операциях на базе ввода-вывода и сетевых операций. Вероятно, вы обнаружите, что вещи выровнены и начнут ухудшаться, прежде чем у вас будет слишком много потоков, но если вы хотите минимизировать тестирование, используйте график из нескольких результатов, чтобы интерполировать правильную оценку идеального значения.

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

4 голосов
/ 15 апреля 2010

Просто попробуйте разные варианты и измерьте производительность. Есть также такие узкие места, как жесткий диск и скорость сети, поэтому, я думаю, однозначного ответа нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...