首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中对Thread进行不同的操作需要多长时间?

在Java中对Thread进行不同的操作需要多长时间?
EN

Stack Overflow用户
提问于 2015-05-03 13:12:18
回答 1查看 186关注 0票数 1

我编写Java程序,我想让我的多线程程序运行得更快。

我知道设置/读取布尔变量比锁定/解锁互斥锁更快。

锁定/解锁比使线程休眠或唤醒更快。

并且睡眠/唤醒对比创建绝对新的线程更快。

我知道这个过程对于不同的硬件和操作系统是特定的。但是,有没有关于交付期的估计呢?

我寻找类似于"10次睡眠/唤醒持续1次来创建新线程“之类的东西。

EN

回答 1

Stack Overflow用户

发布于 2015-05-03 14:29:30

我想让我的多线程程序运行得更快

关注这一点的最好方法是对应用程序进行内存和CPU分析。我建议首先进行内存分析,因为这通常会获得最快的胜利。由于您没有提到这一点,也许您没有考虑过这一点,但是如果您不小心,您可能会在创建和清理对象时损失性能的50+%。

在清理内存消耗之后,您可以进行CPU分析。这很有用,但有时很难看出如何在不重构应用程序的情况下对其进行改进。这很有可能是你需要做的,以减少消耗。对我来说,一个常见的问题是:我知道添加更多的线程真的有帮助吗?如果我不知道这一点,因为我测量了它,它同样可能是有害的。您可能会惊讶地发现,通过去掉线程,您可以将多线程应用程序的速度提高多少,特别是在延迟更糟糕的情况下。

最后,如果您想转到更低的级别,可以尝试Java Java中的Flight Recorder。这是一个较低级别的视图。一些人认为这比分析器更好,但这些人倾向于首先编写高效的代码。我认为大多数开发人员都应该从分析器开始。

我知道这个过程对于不同的硬件和操作系统是特定的。但是,有没有关于交付期的估计呢?

在多线程环境中,一个操作会在多大程度上减慢另一个线程的速度。也就是说,如果你获得一个锁,它是;

  • 仅由一个线程使用,它非常便宜。
  • 很少被另一个线程共享,它的成本要高得多。
  • 实际上正由另一个线程持有,它可能需要更长的时间。

锁需要多长时间取决于它的使用方式。

另一个问题是什么是瓶颈问题。如果瓶颈是CPU消耗,使用更多线程可以帮助分散负载,但如果问题是CPU到内存带宽的L3缓存消耗,更多的线程可能会更慢。

简而言之,这在很大程度上取决于你在做什么,找到瓶颈并减少它,然后找到下一个瓶颈等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30010445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档