`
deyimsf
  • 浏览: 68066 次
  • 性别: 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
分享到:
评论

相关推荐

    testHttp_多线程压力测试_压力测试_

    然而,由于GIL(全局解释器锁)的存在,Python的多线程在CPU密集型任务上并不能实现真正的并行计算,但在IO密集型任务(如网络请求)中,多线程仍能提高效率。 另一方面,Python的`multiprocessing`模块提供了类似`...

    delphi7 多线程测试(40个线程)

    本主题聚焦于Delphi 7中实现的多线程测试,特别是涉及40个并发线程的情况。Delphi是Embarcadero开发的一款集成开发环境(IDE),它以其高效的Pascal方言——Object Pascal,以及丰富的组件库闻名,适用于创建Windows...

    Python 多进程、多线程效率对比

    Python 界有条不成文的准则: 计算密集型任务适合多进程,IO 密集型任务适合多线程。本篇来作个比较。 通常来说多线程相对于多进程有优势,因为创建一个进程开销比较大,然而因为在 python 中有 GIL 这把大锁的存在...

    深入理解Python 多线程

    Python的多线程不适合CPU密集操作型的任务,适合io密集操作型的任务,例如:SocketServer 如果现在再有CPU密集操作型的任务,那该怎么办呢? 首先说,多进程的进程之间是独立的,然后注意了,python的线程用的是系统...

    多线程编程例子

    多线程可以有效地将这些IO密集型任务与CPU密集型任务(如解码)分离,提高程序的并发性能。 在Linux中,多线程编程还需要关注线程安全问题,如避免全局变量的不安全访问,合理管理资源分配和释放,以及正确处理异常...

    浅析Python多线程与多进程的使用

    总结来说,Python的多线程适合处理IO密集型任务和轻量级并发,而多进程则适用于CPU密集型任务和需要充分利用多核优势的场景。了解并熟练掌握这两种并发模型,对于编写高效的Python程序至关重要。在实际开发中,我们...

    Delphi多线程详解_delphi_delphi多线程_多线程_

    除了传统的多线程,Delphi还支持异步编程模型,如使用IO Completion Ports(IOCP)来处理I/O密集型任务,提高系统吞吐量。IOCP允许系统在I/O操作完成时自动通知线程,避免了不必要的等待和上下文切换。 七、实际...

    FFmpegH264 多线程 优化

    在H264解码过程中,MMX可以加速像素操作,比如IDCT(Inverse Discrete Cosine Transform)和运动补偿等计算密集型步骤。 SSE是MMX的增强版,提供更宽的128位寄存器和更多的SIMD指令,可以处理浮点数和更复杂的运算...

    多线程例子 演示多线程使用

    多线程可以用于执行计算密集型任务或IO密集型任务,如数据处理、网络通信等。 2. **C++中的线程库**:C++11及后续标准引入了`&lt;thread&gt;`库,为多线程编程提供了支持。这个库包含了一些关键类和函数,如`std::thread`...

    Python实现的多线程http压力测试代码

    但是,多线程仍然可以在IO密集型任务(如网络请求)中发挥作用,因为在等待网络响应时,线程可以被切换,从而让其他线程有机会执行。 这个简单的多线程HTTP压力测试代码对于开发者来说是一个很好的起点,可以根据...

    VB.NET多线程编程技术

    2. **资源高效利用**:多线程能够更有效地利用系统资源,特别是对于CPU密集型或IO密集型任务,通过合理调度线程,可以避免资源空闲,提高整体效率。 3. **异步处理**:多线程支持异步处理模式,使得长时间运行的任务...

    Python多线程编程(6寸)[归纳].pdf

    Python的全局解释器锁(GIL)限制了在同一时刻只有一个线程执行Python字节码,这在一定程度上影响了多线程在CPU密集型任务中的并行性能,但在IO密集型任务中仍然能提升效率。 总的来说,Python的多线程编程是一种...

    c#多线程编程实战(原书第二版)源码

    这些方法常用于IO密集型操作,避免阻塞主线程。源码可能展示了如何使用这些模式实现异步方法。 6. **并发集合**:C#提供了线程安全的集合,如`ConcurrentBag`、`ConcurrentDictionary`和`ConcurrentQueue`,这些...

    多线程打开TXT

    6. **异步编程**:虽然多线程可以提高程序并行性,但在UI更新方面,推荐使用异步编程模型,如.NET Framework的`async/await`关键字,这样可以在不阻塞主线程的情况下执行IO密集型任务,保持用户界面的流畅响应。...

    基于QT多线程下载软件的设计与实现

    在单线程程序中,所有的任务都在同一个线程中执行,这可能导致UI响应变慢,特别是在进行IO密集型操作(如网络下载)时。而多线程允许将耗时的操作(下载任务)放在后台线程,保持主线程(通常负责UI更新)的流畅性。...

    PYthon-multithreading-Test.rar_python_python 多线程_python多线程_多线程

    多线程并非总是性能提升的关键,由于GIL(全局解释器锁)的存在,Python的多线程在CPU密集型任务上并不能充分利用多核优势。此时,可以考虑使用多进程(`multiprocessing`模块)或者异步IO(`asyncio`模块)来实现...

    多线程与多进程.rar

    在实际应用中,我们可能会结合多线程和多进程,比如使用多进程来处理CPU密集型任务,利用多线程处理IO密集型任务,因为IO操作时GIL会被释放,此时多线程可以提高效率。 资源中的"多线程与多进程"文件可能包含以下...

    多线程采集C#源代码(转)

    10. **性能优化**:在实现多线程采集时,需要关注CPU使用率、内存占用和IO操作,通过合理的线程数量、任务调度策略等手段优化性能。 这个“多线程采集C#源代码”项目可能包含了以上部分或全部知识点的实现,通过对...

    python 多线程实现多个网址的多次快速访问

    在Python编程中,多线程是一种并发执行任务的机制,尤其在处理I/O密集型任务如网络请求时,能够显著提高程序效率。本教程将详细讲解如何使用Python的多线程来实现对多个网址的快速访问,并记录访问结果。 首先,...

    java多线程编程简介

    - **IO密集型操作**: 对于IO密集型任务(如文件读写、网络通信等),多线程可以有效地避免等待造成的阻塞,提高效率。 **4.2 改善用户体验** - **响应式界面**: 在GUI应用中,多线程可以确保即使后台正在进行耗时...

Global site tag (gtag.js) - Google Analytics