2016-11-05 16 views
0

Я пишу простой тест в Java для проверки распараллеливания. Программа генерирует в общей сложности 1000 случайных байтов и записывает их в двоичный файл. Он использует разные количества потоков для параллелизации генерации байтов и записи на диск и измеряет время выполнения всего процесса для каждого потока.java много потоков, записывающих случайные байты в файл одновременно [just need advice]

Программа разбивает полноту расстрела среди определенного числа потоков - как поколение байтовых массивов и написания этих байт в файл.

Моя проблема в том, что мне нужно иметь один двоичный файл в конце. Мне нужен совет, насколько наилучшим образом сделать каждый поток, чтобы записать его мусорные байты в один и тот же файл. Имейте в виду, что мне все равно, в каком порядке они заканчиваются. У меня есть три идеи:

1) Должен ли я, чтобы каждый поток создавал экземпляр RandomAccessFile, каждый из которых ссылался на один и тот же пустой файл на диске, и есть ли каждый поток записывать в файл, начиная с другого места, таким образом, чтобы они не перекрывались? Это похоже на лучший способ по-настоящему распараллеливать запись на диске.

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

3) Должен ли я каждый поток записывать свои байты в свой собственный файл, а затем «слить» его файл в основной файл?

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

ответ