`
deyimsf
  • 浏览: 68523 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多线程IO密集型测试

 
阅读更多
	 /**
     * 多线程方式测试
     * 检查多线程读取是否可以节省时间
     */
    @SuppressWarnings("unchecked")
	public static void main(String[] args){
    	try{
		    //线程池大小
    		int poolSize = 20;
    		long startIndex = 0;//开始位置
    		int batchSize = 1024*1024*3;//读大小,或缓存大小
    		long total =new File("E:/Tool/CentOS.5.6.iso").length();
    		System.out.println(total);
    		//线程池
    		ExecutorService  executorService = Executors.newFixedThreadPool(poolSize);
    		LinkedList<Future> queue = new LinkedList<Future>();
    		long start =System.currentTimeMillis();

    		while(startIndex <= total){
    			FileInputStream fis = new FileInputStream(new File("E:/Tool/CentOS.5.6.iso"));
    			queue.add(executorService.submit(new ThreadTask(startIndex,batchSize,fis)));
    			startIndex  += batchSize;
    		}
          
    		//关闭线程池
    		executorService.shutdown();
    		
    		while(!queue.isEmpty()){
    			try {
        			queue.pop().get();
				} catch (Exception e) {
	    			System.out.println("+异常 ");
				}
    		}
    		long end =System.currentTimeMillis();
    		System.out.println("耗时:"+String.valueOf(end-start));
    		System.out.println("读了:"+ThreadTask.bbb.toString());
    		
    		
    	}catch (Exception e) {
			e.printStackTrace();
		}
    }
    
}


/**
 * 线程任务
 *
 */
class ThreadTask implements Runnable{
	private FileInputStream fis;
	private long startIndex;
	private int batchSize;
	public static AtomicLong  bbb = new AtomicLong(0);
	public ThreadTask(long startIndex,int  batchSize,FileInputStream fis){
		this.startIndex=startIndex;
		this.fis=fis;
		this.batchSize=batchSize;
	}

	@Override
	public void run() {
		try {
			//System.out.println(Thread.currentThread().getName()+" 开始");
			
			fis.skip(startIndex);
			byte[] b = new byte[batchSize];//缓冲大小
			int flag  = fis.read(b);
			if(flag != -1){
				bbb.addAndGet(flag);
			}
			
			fis.close();
			//System.out.println(Thread.currentThread().getName()+" 结束");
		} catch (Exception e) {
			e.printStackTrace();
		}
	
	}



测试结果:

电脑:华硕N56V
cpu:intel core i5
硬盘:750GB

单线程
时间     大小
42900    4262373376
40545
43477
41259
40810
40591

多线程
时间  线程大小   大小
41855   2         4262373376
41278
42853
42619
45071
43742

43025   3    4262373376
42978
44616
45128
43685
46785

42370   4    4262373376
41371   4
41496
42665
40403
42369

42370   5    4262373376
53539
40373
41215

44678   10    4262373376
43400   10

46768   20    4262373376
48204   20
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics