微网站怎么制作,山西网站群建设,做注塑机的网站,西安工商注册平台官网进程比线程更多资源总览 有一个普遍的论点#xff0c;因为我们有很多核心#xff0c;并且将来还会有更多核心#xff0c;所以我们必须使用它们。 我们只是需要找到使用它们的最佳方法#xff0c;而仅仅是因为我们不能意味着我们应该这样做。 我们的目标是什么#xff1f;… 进程比线程更多资源 总览 有一个普遍的论点因为我们有很多核心并且将来还会有更多核心所以我们必须使用它们。 我们只是需要找到使用它们的最佳方法而仅仅是因为我们不能意味着我们应该这样做。 我们的目标是什么 使用多个线程的充分理由是 使用一个线程的性能还不够。 您已对应用程序进行了概要分析以确保不会有低落的果实。 多线程可提高吞吐量延迟或一致性。 此时当您知道它使您更接近目标时应该添加一个线程。 使用多个线程的不好理由 仅仅因为我们可以使用更多的线程并不意味着我们应该这样做。 多线程 增加代码的复杂性 还有其他就是要加快应用程序。 L1缓存比L3缓存快10到20倍如果您可以通过优化内存使用和访问来在L1缓存中花费更多的时间则与使用插槽中的每个CPU相比您可以获得更高的性能。 多线程可能会引入细微的鲜为人知的错误而单线程代码根本不会出现这些错误。 多线程增加了同步更多地使用了不可变对象而不是回收可变对象。 即使典型性能更好多线程也往往导致更差的抖动和更糟的性能。 简而言之除非有人考虑否则多线程更有可能使程序变慢而不是加速。 两个CPU的速度最多可以快一倍但如果不小心的话很容易变慢十倍。 也就是说您损失的比获得的更多。 一个简单的例子是计算斐波纳契数。 这些很容易递归地描述并创建许多线程。 因此斐波那契数的计算通常用作如何使用大量线程的示例。 他们经常没有提到的是您创建的线程数等于答案即它呈指数增长。 这意味着虽然在一个循环/线程中进行迭代大约需要4毫秒来计算fib69但多线程版本将创建数万亿个线程并且如果不崩溃其花费的时间将比宇宙的寿命还要长。 但是如果我有空闲的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进程比线程更多资源