Самый быстрый способ записи файла с несколькими потоками: FileChannel против нескольких RandomAccessFiles

У меня есть файл (от 0 до N) байтов, который я хочу загрузить, и мне нужно записать его в файл.

Что быстрее записывает в FileChannel с помощью нескольких потоков или одновременно записывает в несколько RandomAccessFiles из каждого потока, который считывает данные из URL-адреса? Является ли стоимость соединения каждой части в один файл после завершения выше, чем запись в один FileChannel и выполнение в конце?

В документации FileChannels указано

В любой момент времени может выполняться только одна операция, которая затрагивает положение канала или может изменить размер его файла; попытки инициировать вторую такую ​​операцию во время выполнения первой блокируются до завершения первой операции.

Это дает мне подсказку, что запись в несколько файлов выполняется быстрее? Или я неправильно понял?

Изменяются ли результаты, когда файлы больше нескольких сотен мегабайт?


person Tomas Bisciak    schedule 01.09.2015    source источник
comment
почему вы хотите написать его, используя несколько потоков, при загрузке файла я бы не беспокоился о времени, которое процессору требуется для записи в потоке, но моим самым большим соображением была бы доступность данных во входном потоке.   -  person QuakeCore    schedule 01.09.2015
comment
есть ли ограничение на скачивание на хосте файла?   -  person QuakeCore    schedule 01.09.2015
comment
не может быть, чтобы ваше приложение уже не было связано с вводом-выводом. одновременная запись в общий ресурс узкого места, такой как диск, просто сделает вещи экспоненциально менее производительными!   -  person    schedule 01.09.2015
comment
Вы должны знать, что маловероятно, что операции с файлами выигрывают от многопоточности вообще. Жесткие диски значительно быстрее для последовательных операций (это также справедливо, в меньшей степени, но все же для твердотельных накопителей). Обработка файлов с несколькими потоками приводит к тому, что операции чтения/записи не выполняются последовательно, а разбросаны по всему диску, что, скорее всего, приведет к снижению общей производительности. Единственным оправданием для использования нескольких потоков может быть желание скрыть высокую задержку (от источника, из которого вы читаете данные).   -  person Marco13    schedule 01.09.2015
comment
@ Marco13 Marco13 Буду ли я ломаться значительно быстрее для последовательных операций, когда я пишу в разные части файла? С одним потоком?   -  person Tomas Bisciak    schedule 04.10.2015
comment
@TomasBisciak Конечно. Немного наводит на размышления: запись 2 байтов в начале файла будет намного быстрее, чем запись 1 байта в начале и 1 байта в конце.   -  person Marco13    schedule 04.10.2015