java多线程性能浅析 - 一篇把线程描述得很形象的文章
2011-08-22 11:07
411 查看
转自:http://www.javaeye.com/topic/848486
java多线程性能浅析 - 一篇把线程描述得很形象的文章
2010年12月22日 星期三 上午 10:23
今天看见je上一帖,对于上亿数据求和的算法,采用多线程到底快还是慢,我认为需要按情况而定。
1.单核,无IO,网络等资源操作情况下
结果:多线程比单线程理论上要慢
原因:多线程启动线程需要消耗cpu资源,多线程只是把这一计算过程分片,在同一时刻只会有一个线程占有cpu,所以采用多线程不但在启动时耗费资源,在线程调度上同样也耗费时间。所以单线程比多线程理论上要快。
2.单核,有IO,网络等资源操作情况下
结果:多线程比单线程理论上要快
原因:如果这上亿数据需要从文件中或者网络的其它地方(数据库)获取,在IO和网络操作的时候,由于IO和网络操作比cpu慢的多,所以cpu等待io操作;多线程的时候,当一个线程io读取部分数据的时候,其它线程可以进行计算。而单线程需要等待文件读取完成后进行计算。所以理论上多线程要快。
3.多核,无IO,网络等资源操作情况下
结果:不确定
原因:在大部分操作系统上,一个进程的多个线程可以分配到多个cpu上并行处理所以多线程理论上比单线程快;在部分的操作系统上不支持一个进程的多个线程分配到多个cpu上并行处理,根据1的结果可以看出多线程理论上比单线程慢。
4.多核,有IO,网络等资源操作情况下
结果:多线程比单线程理论上要快
原因:如果操作系统支持一个进程的多个线程分配到多个cpu上并行处理,则多线程比单线程理论上要快。
如果操作系统不支持一个进程的多个线程分配到多个cpu上并行处理,则多线程比单线程理论上要快,根据2的结果得出。
拿je上高手们的一个例子:挖山洞,我扩展下。
单核,单线程,有IO:相当于从山的一侧进行挖掘工作,工作者需要挖5分钟,然后花费5分钟,用小车将土运出。
单核,多线程,有IO:相当于从山的一侧进行挖掘工作,工作者需要挖5分钟,然后花费5分钟,用小车将土运出,运土的时候,另一个工作者开始挖掘;
双核,单线程,有IO:相当于从山的两侧一个工作者进行挖掘工作,工作者需要挖5分钟,然后花费5分钟,用小车将土运出;
双核,多线程,有IO:相当于从山的两侧两个工作者进行挖掘工作,工作者需要挖5分钟,然后花费5分钟,用小车将土运出;
单核,单线程,无IO:相当于一个工作者从山的一侧进行挖掘工作。
单核,多线程,无IO:相当于两个工作者从山的一侧进行挖掘工作,一个挖会休息,另一个歇息。
双核,单线程,无IO:相当于从山的两侧一个工作者进行挖掘工作。
双核,多线程,无IO:相当于从山的两侧两个工作者进行挖掘工作。
当然有些工地只允许一个工作者工作。
例子虽然比较牵强,但也大致可以说出个理来。一年后在来分析下,看看能不能从更深的角度进行分析!
java多线程性能浅析 - 一篇把线程描述得很形象的文章
2010年12月22日 星期三 上午 10:23
今天看见je上一帖,对于上亿数据求和的算法,采用多线程到底快还是慢,我认为需要按情况而定。
1.单核,无IO,网络等资源操作情况下
结果:多线程比单线程理论上要慢
原因:多线程启动线程需要消耗cpu资源,多线程只是把这一计算过程分片,在同一时刻只会有一个线程占有cpu,所以采用多线程不但在启动时耗费资源,在线程调度上同样也耗费时间。所以单线程比多线程理论上要快。
2.单核,有IO,网络等资源操作情况下
结果:多线程比单线程理论上要快
原因:如果这上亿数据需要从文件中或者网络的其它地方(数据库)获取,在IO和网络操作的时候,由于IO和网络操作比cpu慢的多,所以cpu等待io操作;多线程的时候,当一个线程io读取部分数据的时候,其它线程可以进行计算。而单线程需要等待文件读取完成后进行计算。所以理论上多线程要快。
3.多核,无IO,网络等资源操作情况下
结果:不确定
原因:在大部分操作系统上,一个进程的多个线程可以分配到多个cpu上并行处理所以多线程理论上比单线程快;在部分的操作系统上不支持一个进程的多个线程分配到多个cpu上并行处理,根据1的结果可以看出多线程理论上比单线程慢。
4.多核,有IO,网络等资源操作情况下
结果:多线程比单线程理论上要快
原因:如果操作系统支持一个进程的多个线程分配到多个cpu上并行处理,则多线程比单线程理论上要快。
如果操作系统不支持一个进程的多个线程分配到多个cpu上并行处理,则多线程比单线程理论上要快,根据2的结果得出。
拿je上高手们的一个例子:挖山洞,我扩展下。
单核,单线程,有IO:相当于从山的一侧进行挖掘工作,工作者需要挖5分钟,然后花费5分钟,用小车将土运出。
单核,多线程,有IO:相当于从山的一侧进行挖掘工作,工作者需要挖5分钟,然后花费5分钟,用小车将土运出,运土的时候,另一个工作者开始挖掘;
双核,单线程,有IO:相当于从山的两侧一个工作者进行挖掘工作,工作者需要挖5分钟,然后花费5分钟,用小车将土运出;
双核,多线程,有IO:相当于从山的两侧两个工作者进行挖掘工作,工作者需要挖5分钟,然后花费5分钟,用小车将土运出;
单核,单线程,无IO:相当于一个工作者从山的一侧进行挖掘工作。
单核,多线程,无IO:相当于两个工作者从山的一侧进行挖掘工作,一个挖会休息,另一个歇息。
双核,单线程,无IO:相当于从山的两侧一个工作者进行挖掘工作。
双核,多线程,无IO:相当于从山的两侧两个工作者进行挖掘工作。
当然有些工地只允许一个工作者工作。
例子虽然比较牵强,但也大致可以说出个理来。一年后在来分析下,看看能不能从更深的角度进行分析!
相关文章推荐
- C++ windows多线程 线程描述了进程内代码的执行路径。进程中同时可以有多个线程在执行,为了使他们能够同时运行,操作系统为每个线程轮流分配CPU时间片,为了充分地利用CPU提高软件产品的性能,一
- 看到一篇专门讲JAVA多线程的文章,挺不错
- Java多线程与单线程性能对比
- JAVA多线程————一篇文章让你彻底征服多线程开发(一)
- [Java 09 多线程] 线程是指一个进程在执行过程中可以产生更小的程序单元
- Java进阶学习2-多线程之守护线程
- 大量数据情况下单线程插入和多线程(高并发)insert数据库的性能测试
- Java 多线程(二)——创建线程(Thread、Runnable、Callable)
- Java多线程-线程的调度(守护线程)
- 探索并发编程(六)------Java多线程性能优化
- Java的线程和多线程教程
- Java多线程:用三个线程控制循环输出10次ABC
- Java多线程-线程按序交替
- 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
- java 多线程—— 线程等待与唤醒
- [置顶] Java 多线程 学习笔记(二)停止线程的几种方法
- Java程序性能优化总结--------线程、I/O及系统篇
- soa---java 多线程-线程内存模型
- Java多线程编程总结笔记——一多线程基础知识
- Java 多线程编程之六:线程之间的通信(附源代码)