社区
Java SE
帖子详情
关于java多线程的性能
吴冬冬
领域专家: 后端开发技术领域
2009-08-13 06:12:58
就性能方面我认为是 无阻塞(包括IO阻塞,同步阻塞等)就不要用多线程,不然比单线程还慢。
关于单核和多核的考虑 有些人可能认为 多核的情况下多线程能提高性能
但单线程在多核下就是用的单CPU吗?答案是非也,自己写个单线程在多核下运行试试就知道了
欢迎大家讨论
...全文
434
22
打赏
收藏
关于java多线程的性能
就性能方面我认为是 无阻塞(包括IO阻塞,同步阻塞等)就不要用多线程,不然比单线程还慢。 关于单核和多核的考虑 有些人可能认为 多核的情况下多线程能提高性能 但单线程在多核下就是用的单CPU吗?答案是非也,自己写个单线程在多核下运行试试就知道了 欢迎大家讨论
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jinxfei
2009-08-14
打赏
举报
回复
[Quote=引用 20 楼 lastsweetop 的回复:]
PS:而CPU需要复杂的元素按操作这种情况呢-----》而CPU需要复杂的运算操作这种情况呢
[/Quote]
阻塞就是因为速度不匹配引起的,涉及到I/O,必定有阻塞,这基本上是毫无疑问的,
除非有一种I/O能够和计算机的总线速度完全匹配。
你说“
再例如CPU运算做生产者,IO操作作消费者的情况,这样也可能不会阻塞。
”,
怎么可能,CPU每秒产生1000M数据,I/O怎么消费,怎么可能不阻塞,
只是这里阻塞的不是I/O,是把CPU阻塞了,
而这时候不用多线程,那么CPU的计算能力就白费了,只能屈尊到I/O的速度。
而另一方面,
无论CPU做多么复杂的处理动作,处理完以后,你必定要去I/O读取下一个数据,或者通过I/O存数据,
在这一刻,无论读/存数据花10MS还是1MS,
总之,这时候,CPU就是在等待,这就是阻塞。
怎么才能不阻塞呢?
那就是在CPU还正在处理的时候,就把数据读出来,
ok,这时候,其实就是多线程了,一个线程在运算,另一个线程在读数据。
jiaxiangw
2009-08-14
打赏
举报
回复
初学java好多都不懂,大家都是大虾啊
吴冬冬
2009-08-14
打赏
举报
回复
PS:而CPU需要复杂的元素按操作这种情况呢-----》而CPU需要复杂的运算操作这种情况呢
吴冬冬
2009-08-14
打赏
举报
回复
[Quote=引用 15 楼 jinxfei 的回复:]
引用 10 楼 lastsweetop 的回复:
引用 7 楼 java2000_net 的回复:
错误的想法。我举一个简单的例子吧!
你要更新10个服务器的数据,你可以从1到10逐个更新,也可以同时开启10个线程(或者进程)进行更新。
请注意:影响系统速度的因素决定了多线程的效率。
在这个需求里,速度最慢的是网速和数据库的处理速度,所以此时开启多线程是有意义的。
当然,你可以认为什么非阻塞,但实际情况是,你的程序如果一直在内存里运行,不设及到任何IO操作,那么这个程序也就不需要跟外界进行任何操作,那么....
1.网速和数据库处理速度可能产生阻塞
2.不是涉及IO操作就一定阻塞
你好像没明白我的意思,或者你自己也不明白自己讲什么
楼主啊,只要涉及I/O基本上就存在阻塞,因为还没有哪个I/O的速度能够比上CPU。
所以,从CPU的角度来看,除了寄存器,其它的都是I/O,都是外设,
内存都不能例外。
所以老紫竹说的很对,在不讨论任何阻塞的情况下,讨论这个问题意义不大。
楼主啊,你再说说你讨论这个问题的意义吧,
因为如果不考虑阻塞的话,可能真的只剩下数数这件事儿可作了。
[/Quote]
IO操作一定阻塞的观点,我不赞同
IO确实比CPU慢很多,但只是从相同的处理量来说
如果IO只是读一条数据,而CPU需要复杂的元素按操作这种情况呢。
(考虑问题要全面,刘易斯跑百米是比我快,但他跑1000米,我跑100米呢,谁先到终点?)
所谓阻塞,我的理解就是供不应求。
再例如CPU运算做生产者,IO操作作消费者的情况,这样也可能不会阻塞。
humanity
2009-08-13
打赏
举报
回复
接分也还是有意义的。
如果按楼主的意思,我只能说各自有其生存的理由,既然没必要用那就表示它本来就不是为其而生的。因为不是所有的东西都只从技术方面去了解,很多时候我们是为了解决某类特定的问题而提出新的设想,甚至有些时候API里面都写下了设计约定(为了这样写而不那样写),而没有说这个设想/编程模型是万能的,你的想法我也赞成,比如像数数确实没必要用多线程,因为做这样简单的算术运算的时间猜测比较线程切换还要少吧(还从没观察过呢,不知道用什么工具观测)?
zx8813443
2009-08-13
打赏
举报
回复
刚看了一个没有什么意义的帖子
jinxfei
2009-08-13
打赏
举报
回复
如果所有人都不明白楼主的意思,呵呵。。。
jinxfei
2009-08-13
打赏
举报
回复
[Quote=引用 10 楼 lastsweetop 的回复:]
引用 7 楼 java2000_net 的回复:
错误的想法。我举一个简单的例子吧!
你要更新10个服务器的数据,你可以从1到10逐个更新,也可以同时开启10个线程(或者进程)进行更新。
请注意:影响系统速度的因素决定了多线程的效率。
在这个需求里,速度最慢的是网速和数据库的处理速度,所以此时开启多线程是有意义的。
当然,你可以认为什么非阻塞,但实际情况是,你的程序如果一直在内存里运行,不设及到任何IO操作,那么这个程序也就不需要跟外界进行任何操作,那么....
1.网速和数据库处理速度可能产生阻塞
2.不是涉及IO操作就一定阻塞
你好像没明白我的意思,或者你自己也不明白自己讲什么
[/Quote]
楼主啊,只要涉及I/O基本上就存在阻塞,因为还没有哪个I/O的速度能够比上CPU。
所以,从CPU的角度来看,除了寄存器,其它的都是I/O,都是外设,
内存都不能例外。
所以老紫竹说的很对,在不讨论任何阻塞的情况下,讨论这个问题意义不大。
楼主啊,你再说说你讨论这个问题的意义吧,
因为如果不考虑阻塞的话,可能真的只剩下数数这件事儿可作了。
阿士匹灵
2009-08-13
打赏
举报
回复
高手讨论的问题
呵呵
线程的性能 效率
islandrabbit
2009-08-13
打赏
举报
回复
很好的学习机会,帮顶。
chenql175
2009-08-13
打赏
举报
回复
学习~~~
yanliang_xt
2009-08-13
打赏
举报
回复
学习了。。
吴冬冬
2009-08-13
打赏
举报
回复
[Quote=引用 7 楼 java2000_net 的回复:]
错误的想法。我举一个简单的例子吧!
你要更新10个服务器的数据,你可以从1到10逐个更新,也可以同时开启10个线程(或者进程)进行更新。
请注意:影响系统速度的因素决定了多线程的效率。
在这个需求里,速度最慢的是网速和数据库的处理速度,所以此时开启多线程是有意义的。
当然,你可以认为什么非阻塞,但实际情况是,你的程序如果一直在内存里运行,不设及到任何IO操作,那么这个程序也就不需要跟外界进行任何操作,那么....
[/Quote]
1.网速和数据库处理速度可能产生阻塞
2.不是涉及IO操作就一定阻塞
你好像没明白我的意思,或者你自己也不明白自己讲什么
lixiaolong3399
2009-08-13
打赏
举报
回复
楼主只是希望,我们对这个话题提出自己的看法,, 但又希望我们肯定无阻塞不用多线程这个观点, 从这点来看, 楼主已经明白了这个点,, 程序本身就是有需要就使用, 没需要就不用使用。。 所以,决定多线程是否使用, 看的是自己要做什么。。 相信大家都明白。。。。 谢谢楼主的贴。
老紫竹
2009-08-13
打赏
举报
回复
我认为这个程序没有存在的必要。自杀算了。
老紫竹
2009-08-13
打赏
举报
回复
错误的想法。我举一个简单的例子吧!
你要更新10个服务器的数据,你可以从1到10逐个更新,也可以同时开启10个线程(或者进程)进行更新。
请注意:影响系统速度的因素决定了多线程的效率。
在这个需求里,速度最慢的是网速和数据库的处理速度,所以此时开启多线程是有意义的。
当然,你可以认为什么非阻塞,但实际情况是,你的程序如果一直在内存里运行,不设及到任何IO操作,那么这个程序也就不需要跟外界进行任何操作,那么....
铁匠梁老师
2009-08-13
打赏
举报
回复
学习了,东西都有适合的场景。
适合最好
吴冬冬
2009-08-13
打赏
举报
回复
[Quote=引用 4 楼 jinxfei 的回复:]
无论是java还是什么,只要是有线程,就有调度开销,这是毋庸置疑的。
所以,仅仅讨论多线程的性能,感觉意义不大。
如果要从1数到100000000,那么单线程肯定比多线程快啊。
多线程,是干啥用的呢?
说白了,说到底,是为了简化编程模型。
[/Quote]
我说的重点是 无阻塞就不用多线程
多线程不仅是简化编程模型,在有阻塞产生时,多线程确实可以提高性能。
但是无阻塞时用多线程反而会降低性能。
很多业务需要多线程,这个大家都懂
希望大家下面的讨论只从性能方面考虑
jinxfei
2009-08-13
打赏
举报
回复
无论是java还是什么,只要是有线程,就有调度开销,这是毋庸置疑的。
所以,仅仅讨论多线程的性能,感觉意义不大。
如果要从1数到100000000,那么单线程肯定比多线程快啊。
多线程,是干啥用的呢?
说白了,说到底,是为了简化编程模型。
绿绦
2009-08-13
打赏
举报
回复
楼主所说
多核 运行单线程 的不同 在于结果不同 处理机制没有变化 CPU等待调度的时间不同了
多核运行 多线程 在cup调度的机制不同 结果也不同
这两者的不同 是不能平级看待
个人意见
绿绦工作室
加载更多回复(2)
java
多线程
性能
_
Java
中
多线程
的
性能
比较
本文通过实验对比了
Java
中不同
多线程
技术的
性能
,包括synchronized关键字、ReentrantLock、原子变量等,发现原子变量在所有同步方法中表现最佳。
Java
中
多线程
的
性能
比较
本文通过实验对比了
Java
中不同
多线程
技术的
性能
,包括同步关键字、ReentrantLock、原子变量等,并分析了不同矩阵大小、线程数及池大小对
性能
的影响。
Java
多线程
性能
优化
随着多核处理器普及,
Java
多线程
并发编程愈发重要。但编写高效
多线程
程序不易,需掌握
性能
优化技巧。本文介绍了合理使用线程池、优化同步机制、减少线程上下文切换、避免资源竞争等方面的方法,以提高
多线程
程序
性能
。
Java
多线程
与单线程
性能
对比
通过对
Java
多线程
与单线程执行相同任务量的
性能
对比,发现在处理大量任务时,
多线程
表现出显著的
性能
优势。例如,处理1000个任务时,
多线程
耗时243ms,而单线程耗时921ms,
性能
提升近4倍,这与处理器的核数可能存在直接关系。
Java
多线程
环境下 volatile 的
性能
调优
本文聚焦
Java
多线程
环境下volatile的
性能
调优。先介绍
多线程
编程的数据一致性挑战,以生活比喻讲解volatile核心概念,剖析其底层实现与
性能
开销来源。接着给出5条调优策略,如明确适用场景、减少写操作频率等,还通过配置热加载系统实战验证效果。
Java SE
62,621
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章