欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

进程比线程更多资源_为什么我们不应该使用比我们需要更多的线程

发布时间:2023/12/3 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 进程比线程更多资源_为什么我们不应该使用比我们需要更多的线程 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

进程比线程更多资源

总览

有一个普遍的论点,因为我们有很多核心,并且将来还会有更多核心,所以我们必须使用它们。 我们只是需要找到使用它们的最佳方法,而仅仅是因为我们不能意味着我们应该这样做。

我们的目标是什么?

使用多个线程的充分理由是

  • 使用一个线程的性能还不够。
  • 您已对应用程序进行了概要分析,以确保不会有低落的果实。
  • 多线程可提高吞吐量,延迟或一致性。
此时,当您知道它使您更接近目标时,应该添加一个线程。

使用多个线程的不好理由

仅仅因为我们可以使用更多的线程并不意味着我们应该这样做。 多线程
  • 增加代码的复杂性
  • 还有其他就是要加快应用程序。 L1缓存比L3缓存快10到20倍,如果您可以通过优化内存使用和访问来在L1缓存中花费更多的时间,则与使用插槽中的每个CPU相比,您可以获得更高的性能。
  • 多线程可能会引入细微的,鲜为人知的错误,而单线程代码根本不会出现这些错误。
  • 多线程增加了同步,更多地使用了不可变对象,而不是回收可变对象。
  • 即使典型性能更好,多线程也往往导致更差的抖动和更糟的性能。

简而言之,除非有人考虑,否则多线程更有可能使程序变慢而不是加速。 两个CPU的速度最多可以快一倍,但如果不小心的话,很容易变慢十倍。 也就是说,您损失的比获得的更多。

一个简单的例子是计算斐波纳契数。 这些很容易递归地描述并创建许多线程。 因此,斐波那契数的计算通常用作如何使用大量线程的示例。 他们经常没有提到的是,您创建的线程数等于答案,即它呈指数增长。 这意味着,虽然在一个循环/线程中进行迭代大约需要4毫秒来计算fib(69),但多线程版本将创建数万亿个线程,并且如果不崩溃,其花费的时间将比宇宙的寿命还要长。

但是,如果我有空闲的CPU,那是在浪费它们。

如果要使用每个CPU,只需为每个CPU编写一个繁忙的等待线程即可,完成后,每个CPU的使用率都是100%

假设您要从A到B行驶,有时您可以走一条街,有时走四条街会更快。 但是在A和B附近有20条街道,您应该沿着所有20条街道上下走,因为否则它们就没有意义了,对!!

结论

如果您专注于系统工程设计,以便于开发和维护,那么您将需要最简单的解决方案来解决您的问题。 如果那意味着您不使用100%的网络带宽,100%的磁盘空间,100%的内存或100%的CPU,那也许是一件好事。

参考: 为什么我们不应该使用比我们的JCG合作伙伴 Peter Lawrey在Vanilla Java博客上更多的线程 。

翻译自: https://www.javacodegeeks.com/2013/11/why-we-shouldnt-use-more-threads-than-we-need-to.html

进程比线程更多资源

创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

总结

以上是生活随笔为你收集整理的进程比线程更多资源_为什么我们不应该使用比我们需要更多的线程的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。