2011-10-16 2 views
-1

나는 하나의 파일을 읽는 3 개의 스레드를 원한다. 예를 들어 파일의 크기는 900kb이다. 첫 번째 스레드는 파일을 1kb로 읽고 다른 스레드는 같은 방식으로 파일을 읽는다. 쓰레드는 301kb에서 600kb까지 읽고 쓰레드는 601kb에서 900kb까지 읽는다.)이 접근법은 더 빠른 출력을 읽는 것을 콘솔에 보여 주어야한다. 출력은 나에게 중요하지 않다. 주요 문제는 읽는 방법이다. 누군가 PLZ3 개의 스레드를 사용하여 단일 파일 읽기

+2

http://stackoverflow.com/questions/1547209/java-multithreading-reading-a-single-large-file 관련? –

답변

-2
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); 
} 
} 
+1

이것은 재앙을위한 처방이다. 개별 라인을 제대로 확보 할 수는 없습니다. – Grodriguez

3

이있는 경우 단일 스레드로 빠르게로 비교 PLZ PLZ 내가 자바 전문가는 아니지만 당신의 목표는 성능이 경우, 당신은 읽기 귀찮게하지해야한다고 생각합니다 나에게 제안 또는 코딩을 제공 여러 스레드에서 단일 메가 바이트 파일. 대부분의 시간은 실제 IO 작업 (디스크에서 읽기)에 소요되는 시간입니다 (디스크 작업은 메모리 작업보다 수백 배 느립니다). 물론 때로는 더 빠를 수도 있습니다 (예 : Linux 시스템의 경우 파일 데이터가 캐시되었거나 이전에 읽거나 쓰여졌을 수 있음).

그러나 파일을 읽는 경우 (즉, 메가 바이트 크기의 파일) 시스템에서 대부분의 시간이 소요되므로 코딩에 영향을 미치지 않습니다.

메가 바이트 파일을 읽는 것이 오늘날의 컴퓨터에서 빠르게 이루어져야합니다. 꼭 필요한 경우 시스템을 개선하기 위해 더러운 시스템 트릭을 사용할 수 있습니다 (예 : Linux readahead system call).

사실, 귀하의 질문에 놀랐습니다. 1 메가 바이트를 읽는 것이 오늘 빠릅니다!

감사합니다.

Basile Starynkevitch

+0

당신 말이 맞아요. 몇 가지 특수한 상황 (SSD, RAID, 대용량 데이터 세트)이 있는데 도움이 될 수 있지만 많지 않은 데는 1MB 밖에되지 않습니다. 단일 디스크 만 사용할 수있는 경우 다중 스레드 읽기는 상황을 항상 악화시킵니다. 디스크는 본질적으로 단일 스레드 미디어입니다. – dmeister

관련 문제