我在java弹簧中有一个应用程序。该应用程序需要多线程。所以我使用可调用的&执行器服务,因为每个线程都会返回一些字符串值。 所以我的问题是如何决定可以保留的最大线程数? 而重要的问题是,如果我继续增加线程数量,但照顾堆大小的条件,是否会在线程数超过某个限制后开始降低性能?增加线程数是否会降低java的整体性能?
0
A
回答
1
那么,这样的问题的最佳答案是“这取决于”。但我可以肯定地指出,它取决于什么:)
- 你在一个线程中所做的工作。
- 代码是否已经在利用底层硬件的并行特性?
- 整个代码是否存在瓶颈,比并行任务需要更多时间?
在JVM中获取线程基础结构是一个代价高昂的过程,当您谈论线程时,同步也会出现。让我们暂时忘记同步。即使如此,如果执行的任务比分配和管理线程的开销更低,我会说严格的NO到多线程。
事情是多线程证明是一个福音是当你的首要任务是使网络电话,有许多这样的任务。
另一个这样的要求是做一些独立的计算,如块式矩阵乘法。
注意:编译器现在是一个天做了一些优化,以提高你的代码的并行处理能力。但以正确的方式编码的更大责任取决于您。
例如:考虑下面的代码在数组中添加10个数字。
这似乎是添加数组元素的最佳方法。但低于实际利用处理器的并行处理能力:
total = a[0] = a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8] + a[9];
明智的选择:)
3
找出使用多少个线程的最好方法是凭经验。但你可以预先猜测;如果你正在做大量的阻塞IO,你会想要更多的线程。如果你根本没有做任何IO,而只是使用CPU,那么你理想的情况是不需要比内核多的线程。您还必须考虑同步开销,如果您需要大量同步,那么在多线程上运行该代码很可能不会提高性能。
同样,它在很大程度上取决于应用程序。这些都只是经验法则,你将不得不执行更详细的分析和一些测试运行实际上能够告诉你的应用程序。
0
简单的答案是肯定的,因为线程之间的交换是相当昂贵的。您必须在换出正在等待的线程和其他线程可以获得某些CPU以及交换费用之间取得平衡。
例如,如果你有100个comsumer线程典型的生产者,我怀疑的吞吐量会比如果你有10
0
最有可能的是,这会降低整体性能要大得多。以下是一些需要考虑的事实:
- 在大多数情况下,由于CPU /内核数量有限,可以同时运行的线程数量有限;
- 将一个线程与
WAITING
状态一起激活一些其他线程(这是所谓的context switching
的一部分)在CPU资源方面相当昂贵; - 有Amdahl定律它提供了问题的答案 - 线程数,CPU,部分“工作”之间的关系可以同时完成并产生加速。这里很难发布公式,所以我只留下wiki page link。
相关问题
- 1. 增加块大小会降低性能
- 2. Ajax是否会降低性能?
- 3. log.debug是否会降低性能
- 4. #defines是否会降低性能?
- 5. Java安全管理器是否会降低性能?
- 6. 使用PNG是否会降低Android应用程序的性能?
- 7. 额外的数据是否会降低Python对象的性能?
- 8. 内嵌JavaScript事件是否会降低网页加载性能?
- 9. n层体系结构是否会降低应用程序性能
- 10. WPF:窗口大小增加会降低性能
- 11. 嵌套select子句是否会降低数据库性能?
- 12. 在什么情况下Java性能会随着内存的增加而降低?
- 13. SmtpClient.SendAsync是否降低或提高性能?
- 14. 是否太多symfony中的服务会降低其性能?
- 15. 事务块是否会降低SQL Server的性能?
- 16. 空的.ctor和.dtor是否会降低性能?
- 17. 为什么添加线性回归功能会降低精度?
- 18. 随着“IN”子句中的数字元素增加,SQL性能是否会降低?
- 19. 向MySQL引入外键是否会降低性能
- 20. 在MySql中使用IN运算符是否会降低性能?
- 21. 生活时间(ttl)是否会影响或降低性能?
- 22. 在PHP中包含太多文件是否会降低性能?
- 23. 分区是否会降低查询性能?
- 24. 调用方法是否会降低性能?
- 25. Do Views是否会降低LINQ查询性能?
- 26. 多线程是否会降低运行时间?
- 27. Web服务增加安全性并降低性能?
- 28. Vim滚动性能是否会降低垂直分割窗口的性能?
- 29. .ajax问题,降低了IE的整体性能
- 30. Java性能降低锁的移除
大概。最好的方法是尝试;) – Tedil
“Java并发实践”中的“8.2。调整线程池”一节有关于此主题的有用信息http://books.google.ru/books?id=EK43StEVfJIC&pg=PT186&lpg = PT186&dq = Sizing + Thread + Pools + java + concurrency + in + practice&source = bl&ots = un0Gx2sRlr&sig = q6gBylm5pFXWgdyB3bV6KcIQUsI&hl = en&sa = X&ei = LsRkU4vDHcGN4ATvx4C4Dw& ved = 0CEkQ6AEwBA – ka3ak