Tôi có 8 tệp. Mỗi người trong số họ là khoảng 1,7 GB. Tôi đang đọc những tập tin đó thành một mảng byte và hoạt động đó đủ nhanh.BufferedReader trong môi trường đa lõi
Mỗi tập tin sau đó được đọc như sau:
BufferedReader br=new BufferedReader(new InputStreamReader(new ByteArrayInputStream(data)));
Khi xử lý bằng một lõi duy nhất trong một cảm giác liên tục phải mất abour 60 giây để hoàn thành. Tuy nhiên, khi phân phối các tính toán trên 8 lõi riêng biệt phải mất đến nay dài hơn 60 giây cho mỗi tập tin.
Vì dữ liệu là tất cả trong bộ nhớ và không có hoạt động IO nào được thực hiện, tôi đã giả sử rằng sẽ mất không quá 60 giây để xử lý một tệp trên mỗi lõi. Vì vậy, tổng số 8 tập tin sẽ hoàn thành chỉ trong hơn 60 giây nhưng đây không phải là trường hợp.
Tôi có thiếu điều gì đó về hành vi BufferedReader không? hoặc bất kỳ độc giả nào được sử dụng trong mã trên.
Nó có thể đáng nói mà tôi đang sử dụng mã này để tải lên file đầu tiên:
byte[] content=org.apache.commons.io.FileUtils.readFileToByteArray(new File(filePath));
Mã khắp nơi trông như thế này:
For each file
read the file into a byte[]
add the byte[] to a list
end For
For each item in the list
create a thread and pass a byte[] to it
end For
Có bao nhiêu ổ đĩa được phân phối? Hay tất cả chúng đều được lưu trữ trên cùng một ổ đĩa? –
Đối với các tệp lớn như vậy, tôi khuyên bạn nên sử dụng NIO. Vui lòng kiểm tra bài viết này: http://www.javalobby.org/java/forums/t17036.html, có thể hữu ích – n1ckolas
Các tệp nằm trong bộ nhớ được lưu trữ trong một byte []. ổ đĩa không có liên quan ở đây. @RJRyV – DotNet