Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中线程的不同操作需要多长时间?_Java_Multithreading_Performance - Fatal编程技术网

Java中线程的不同操作需要多长时间?

Java中线程的不同操作需要多长时间?,java,multithreading,performance,Java,Multithreading,Performance,我编程Java,我想让我的多线程程序运行得更快 我知道设置/读取布尔变量比锁定/解锁互斥锁要快。 锁定/解锁比使线程休眠或唤醒更快。 而睡眠/唤醒对比创建全新线程更快 我知道这个过程是针对不同的硬件和操作系统的。但是否有提前期的估计值? 我寻找类似“10次睡眠/醒来持续1次以创建新线程”的东西 我想让我的多线程程序运行得更快 关注这一点的最佳方式是对应用程序的内存和CPU进行配置。我建议首先进行内存分析,因为这通常是最快的胜利。正如您没有提到的,也许您没有考虑过,但如果您不小心,创建和清理对象可

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

我知道设置/读取布尔变量比锁定/解锁互斥锁要快。
锁定/解锁比使线程休眠或唤醒更快。
而睡眠/唤醒对比创建全新线程更快

我知道这个过程是针对不同的硬件和操作系统的。但是否有提前期的估计值?
我寻找类似“10次睡眠/醒来持续1次以创建新线程”的东西

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

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

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

最后,如果您想进入较低级别,请尝试Java任务控制中的飞行记录器。这是一个较低级别的视图。有些人认为这比分析器好,但这些人首先倾向于编写高效的代码。我认为大多数开发人员应该从分析器开始

我知道这个过程是针对不同的硬件和操作系统的。但是否有任何提前期的估计

它们也因您使用它们的程度而不同,在多线程环境中,一个操作会使另一个线程慢多少。i、 e.如果您获得的锁是:

  • 只有一个线程使用过它是相当便宜的
  • 很少被其他线程共享,它的成本要高得多
  • 实际上是被另一个线程持有,这可能需要更长的时间
锁需要多长时间取决于它的使用方式

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


简而言之,太多取决于您正在做什么,找到瓶颈并减少它,然后找到下一个瓶颈等等。

对特定硬件和操作系统的依赖可能太大,甚至无法给出估计。为什么不为您的系统编写一个简单的基准并运行它呢?但是首先想想,你不是正在进入一个可怕的过早优化领域吗?