Мне нужно было бы прочитать файл эффективным способом.Как читать из разных разделов файла, используя несколько потоков в java, и будет ли он эффективным?
Я бы прочитал файл, и каждое слово из прочитанного файла просмотрело бы пользовательский словарь и решило бы смещение слова в файле.
я придумал следующее решение для этого
Producer нить
Читает строку за строкой из файла и помещает каждую строку ConcurrentHashMap.
Потребительские темы
Читает строку из карты и смотрит в словарь на слово.
Я абсолютно уверен в реализации потребителя, но не уверен, что использование потоков для чтения файла было бы полезно. Неуверенный об использовании Java IO или Java NIO
Обновленный образец кода для чтения из файла обновления, чтобы карта для производителя
public class DocumentManager {
Map<Location, String> map = null;
public DocumentManager(Map<Location, String> map) {
this.map = map;
}
public void readFile(String path) throws IOException{
BufferedReader bufferedReader = new BufferedReader(new FileReader(new File(path)));
String line = "";
while((line = bufferedReader.readLine()) != null){
map.put(new Location(0, 0), line);
//location is dummy at the moment
}
}
}
Что вы подразумеваете под «эффективным»? Многопоточная программа является «менее эффективной», чем однопоточная программа, если «эффективный» означает наилучшее использование циклов ЦП, но многопоточная программа, работающая на многопроцессорном хосте, может быть более эффективной, чем однопоточная программа, если «эффективный» означает получение работы в минимальном количестве в реальном времени. –
Файловый ввод-вывод часто является узким местом. Насколько узкое место зависит от характера файловой системы. Если вы говорите о классическом (т. Е. Вращающемся) жестком диске, то не имеет значения, сколько процессоров доступно для запуска вашего кода, если диск имеет только один массив заголовков. Даже если это твердотельный накопитель, он подключается к хосту через один интерфейс, и если ваша программа способна обрабатывать данные так же быстро, как их можно вытащить через интерфейс, то нет никакого способа, чтобы добавить больше потоков, Быстрее. Несколько раз, лучший способ узнать, это попробовать. –
Это в основном бессмысленно. Диск не является многопоточным. Дни дисков с фиксированными дисками с несколькими головками - это несколько десятилетий назад. Вы можете читать миллионы строк в секунду с помощью «BufferedReader». Если этого недостаточно, ничего нет. – EJP