【发布时间】:2014-04-15 13:04:45
【问题描述】:
我的服务器在处理器、存储吞吐量和内存方面拥有大量资源,可用于处理大量文件。
我正在做一些性能测试,并调整了一个小型java程序来测试并行读取。代码如下
import java.io.*;
import java.lang.*;
class MultiThreadedFileRead extends Thread
{
InputStream in;
MultiThreadedFileRead(String fname) throws Exception
{
in=new FileInputStream(fname);
this.start();
}
public void run()
{
int i=0;
while(i!=-1)
{
try
{
i=in.read();
//System.out.print((char)i);
continue;
}catch(Exception e){}
}
try
{
in.close();
}catch(Exception e){}
}
public static void main(String a[]) throws Exception
{
int n=[0];
MultiThreadedFileRead fr[]=new MultiThreadedFileRead[n];
long tim;
tim=System.currentTimeMillis();
for(int i=1;i<n;i++)
fr[i]=new MultiThreadedFileRead(a[i]);
for(int i=1;i<n;i++)
{
try
{
fr[i].join();
}catch(Exception e){}
}
System.out.println("Time Required : "+(System.currentTimeMillis()-tim)+" miliseconds.");
}
}
结果似乎是正确的:并行读取 10 个文件(10 个线程)所花费的时间与读取一个文件/一个线程所花费的时间大致相同,而且还需要一些开销。 (对不起,我这里没有实际数字,以后可能会编辑添加它)。
但可以肯定的是,我想知道打开线程以进行并行读取的预期或“合理”开销是多少...?
另外,我不是一个java开发者,所以虽然程序很简单,但如果我有什么不对的地方请指出。
ps。要运行程序,我有 10x10mb 文件(名为 tf0、tf1、tf2 等),我以 java MultiThreadedFileRead 10 tf* 运行测试(用于 10 个线程)。
【问题讨论】:
标签: java multithreading io