锁定老帖子 主题:java多线程性能浅析
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-21
最后修改:2010-12-22
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:相当于从山的两侧两个工作者进行挖掘工作。 当然有些工地只允许一个工作者工作。 例子虽然比较牵强,但也大致可以说出个理来。一年后在来分析下,看看能不能从更深的角度进行分析! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-12-22
简单点说单线程会遇到阻塞的,使用多线程肯定要快。
比如你同时要下载 2个网站的东西,如果你使用单线程你只能等A网站下载完才能下载B网站的。 但是多线程就可以两个网站交叉下载。这样就能充分利用你带宽和硬件资源。 |
|
返回顶楼 | |
发表时间:2010-12-22
kingjiang09 写道 简单点说单线程会遇到阻塞的,使用多线程肯定要快。
比如你同时要下载 2个网站的东西,如果你使用单线程你只能等A网站下载完才能下载B网站的。 但是多线程就可以两个网站交叉下载。这样就能充分利用你带宽和硬件资源。 lz有分析到 |
|
返回顶楼 | |
发表时间:2010-12-22
郁闷啊 为什么我总是用不到 线程呢 是不是水平太低了
|
|
返回顶楼 | |
发表时间:2010-12-22
whaosoft 写道 郁闷啊 为什么我总是用不到 线程呢 是不是水平太低了
不是,是因为你的电脑只有一个核,用了也没啥作用,哈哈~ |
|
返回顶楼 | |
发表时间:2010-12-22
ch_space 写道 whaosoft 写道 郁闷啊 为什么我总是用不到 线程呢 是不是水平太低了
不是,是因为你的电脑只有一个核,用了也没啥作用,哈哈~ 什么叫“电脑只有一个核,用了也没啥作用”?!!! |
|
返回顶楼 | |
发表时间:2010-12-22
神之小丑 写道 ch_space 写道 whaosoft 写道 郁闷啊 为什么我总是用不到 线程呢 是不是水平太低了
不是,是因为你的电脑只有一个核,用了也没啥作用,哈哈~ 什么叫“电脑只有一个核,用了也没啥作用”?!!! 天天围着业务转 |
|
返回顶楼 | |
发表时间:2010-12-22
![]() |
|
返回顶楼 | |
发表时间:2010-12-22
神之小丑 写道 ch_space 写道 whaosoft 写道 郁闷啊 为什么我总是用不到 线程呢 是不是水平太低了
不是,是因为你的电脑只有一个核,用了也没啥作用,哈哈~ 什么叫“电脑只有一个核,用了也没啥作用”?!!! 和电脑多少个核没有太大的关系吧? 难道你的电脑只有一个核就只能开一个浏览器? |
|
返回顶楼 | |
发表时间:2010-12-22
kingjiang09 写道 神之小丑 写道 ch_space 写道 whaosoft 写道 郁闷啊 为什么我总是用不到 线程呢 是不是水平太低了
不是,是因为你的电脑只有一个核,用了也没啥作用,哈哈~ 什么叫“电脑只有一个核,用了也没啥作用”?!!! 和电脑多少个核没有太大的关系吧? 难道你的电脑只有一个核就只能开一个浏览器? 这么明显的玩笑话都要较真。。。 |
|
返回顶楼 | |