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

相关推荐

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

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

    深入理解Python 多线程

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

    Python 多线程+多进程简单使用教程,如何在多进程开多线程

    为什么python多线程在面对IO密集型任务的时候会产生加速作用? 为什么python多线程在面对CPU计算密集型任务的时候不仅起不到加速作用,反而加长了计算时间? 相关传送门: 进程,线程,协程关系:...

    java并发理论基础、可见性、原子性、有序性详解

    在为什么要使用多线程方面,我们将探讨多线程的应用场景和意义,比如在计算密集型操作和IO密集型操作中的使用优势等。如IO密集型操作特点,通常会有大量的等待时间,我们可以采用多线程实现各任务之间的并行处理,...

    Python多线程Threading、子线程与守护线程实例详解

    本文实例讲述了Python多线程Threading、... 对于IO密集型的程序来说,多线程可以利用读IO的时间去做其他事【IO并不占用CPU,这就好像A买个一份外卖,他只需要等着送过来然后敲A家的门就行了】; 而对于CPU密集型的程

    Python中单线程、多线程和多进程的效率对比实验实例

    python的多进程性能要明显优于多线程,因为cpython的GIL对性能做了约束。...如果是IO密集型,多线程进程可以利用IO阻塞等待时的空闲时间执行其他线程,提升效率。所以我们根据实验对比不同场景的效率 操作系统 C

    Python中单线程、多线程和多进程的效率对比实验

    Python是运行在解释器中...如果是IO密集型,多线程进程可以利用IO阻塞等待时的空闲时间执行其他线程,提升效率。所以我们根据实验对比不同场景的效率  操作系统 CPU 内存 硬盘 Windows 10 双核 8GB 机械硬盘 (1)引入

    Java-learning:JAVA学习,包括:面试,多线程,JVM虚拟机,spring源码,mybatis源码等知识点-源码包

    任务一般可分为:CPU密集型,IO密集型,混合型,对于不同类型的任务需要分配不同大小的线程池。 CPU密集型任务 尽量使用较小的线程池,一般为CPU核心数+1 。因为CPU密集型任务具有CPU使用率高,若开过多的线程数,...

    Ruby 多线程的潜力和弱点分析

    Web 应用大多是 IO 密集型的,利用 Ruby 多进程+多线程模型将能大幅提升系统吞吐量。其原因在于:当Ruby 某个线程处于 IO Block 状态时,其它的线程还可以继续执行。但由于存在 Ruby GIL (Global Interpreter Lock)...

    Python多进程并发与多线程并发编程实例总结

    Python支持的并发分为多线程并发与多进程并发(异步IO本文不涉及)。概念上来说,多进程并发即运行多个独立的程序,优势在于并发处理的任务都由操作系统管理,不足之处在于程序与各进程之间的通信和数据共享不方便;...

    python多线程操作实例

    一、python多线程 因为CPython的实现使用了Global ...但是如果你的程序是IO密集型,则使用线程仍然是很好的选择。 二、python多线程使用的两种方法 实例: 复制代码 代码如下: import threading import time def wo

    python使用多线程查询数据库的实现示例

    在这个过程中cpu无疑是处于等待io的空闲状态的,这样既浪费了cpu资源,又花费了大量时间(当然这里主要说多线程,批量查询不在考虑范围,总会存在不能批量查询的情况),在这种非密集型运算(及大量占用cpu资源)的...

    Python 多线程抓取图片效率对比

    Python由于有全锁局的存在,并不能利用多核优势。所以,如果你的多线程进程是CPU密集型的,那多线程并不能带来效率上的提升,...如果是IO密集型,多线程进程可以利用IO阻塞等待时的空闲时间执行其他线程,提升效率。

    简单实用的python教程(通过一个个具体的实用案例快速掌握python项目应用)

    千行代码入门Python ...Python进阶聊聊IO密集型任务、计算密集型任务,以及多线程、多进程 Python3.6正式版要来了,你期待哪些新特性? Python进阶实例讲解Python中的魔法函数(MagicMethods) Flask的web快速开发教程

    python使用多进程的实例详解

    python多线程适合IO密集型场景,而在CPU密集型场景,并不能充分利用多核CPU,而协程本质基于线程,同样不能充分发挥多核的优势。 针对计算密集型场景需要使用多进程,python的multiprocessing与threading模块非常...

    AsynSpider:python并发与异步

    IO密集型:CPU经常等待IO 网络后台服务 网络爬虫 多协程 多线程 CPU密集型:计算密集型,CPU计算为主 加密解密使用多进程 全局解释器锁GIL 即使使用了多线程,同一时刻也只有多个线程使用CPU,导致多核CPU的浪费 GIL...

    eventor:多线程,进程,协程 任务执行器

    使用多线程,进程以及协程实现的任务执行器,加快任务执行(针对IO密集型任务) description 1.Eventor类,初始化参数如下: threadcount: 开启多少个线程 taskunitcount: 每个线程处理多少任务 func: 实际的处理任务的...

    AsyncTaskDispatcher - 简化多个异步操作之间的协作调用

    正确使用异步编程能够使用尽可能少的线程来执行大量的IO密集型操作。可惜的是,即时异步编程有避免线程阻塞等诸多好处,但是这种编程方式至今没有被大量采用。其原因有很多,其中最主要的一点可能就是异步模型在编程...

    Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解

    gevent实现协程,gevent是通过阻塞代码(例如网络延迟等)来自动切换要执行的任务,所以在进行IO密集型程序时(例如爬虫),使用gevent可以提高效率(有效利用网络延迟的时间去执行其他任务)。 GIL(全局解释器锁)是C语言...

Global site tag (gtag.js) - Google Analytics