Чтение одного файла с использованием 3 потока - PullRequest
0 голосов
/ 16 октября 2011

Я хочу, чтобы три потока читали один файл, например, размер файла составляет 900 КБ. Я хочу, чтобы первый поток читал файл от 1 КБ до 300, и таким же образом другой поток делает (2 потока читают от 301 КБ до 600 kb AND 3 thread (чтение от 601kb до 900kb) делает ли этот подход более быстрое чтение, вывод должен быть показан на консоли, может быть смешанный вывод, это не имеет значения для меня. Главное, как читать быстрее по сравнению с одним потоком PLZ PLZ, дайте мне предложение или код, если у кого-то есть PLZ

Ответы [ 2 ]

3 голосов
/ 16 октября 2011

Я не эксперт по Java, но я считаю, что если ваша цель - производительность, вам не стоит читать один мегабайтный файл в нескольких потоках.Большая часть времени, вероятно, тратится на выполнение самой операции ввода-вывода, то есть чтения с диска (напомним, что операции с дисками в миллионы раз медленнее операций с памятью).Конечно, в некоторых случаях это может быть быстрее (например, в системе Linux данные файла могли быть кэшированы, если они были прочитаны или записаны некоторое время назад).

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

И чтение мегабайтного файла должно происходить быстро на современных компьютерах.Вы могли бы использовать некоторые грязные системные трюки, чтобы улучшить его (например, системный вызов Linux * readahead *, если это абсолютно необходимо).

На самом деле, ваш вопрос меня удивляет.Чтение одного мегабайта сегодня быстро!

С уважением.

Базилик Старинкевич

0 голосов
/ 16 октября 2011
public static void main(String[] args){
//
String filePath = args[0];

//Create runnable objects



//Load the file
BufferedReader br = new BufferedReader(new FileReader(filePath));
//share this object among threads you want
MyFileReader mf1 = new MyFileReader(br);
MyFileReader mf2 = new MyFileReader(br);
MyFileReader mf3 = new MyFileReader(br);

new Thread(mf1).start();
new Thread(mf2).start();
new Thread(mf3).start();
//code to detect thread ends
//close br here

}


public class MyFileReader implements Runnable{

private BufferedReader br=null;

public MyFileReader(BufferedReader br){
this.br = br
}

public void run(){
String line=null;
while((line=br.readLine())!=null){
//do your thing here e.g.
System.out.println(line);
}   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...