我致力于实现一个推理器,一个复杂的东西。我试图通过使用并行化线程来提高性能,但只是增加了开销。
我的问题是除监视器(锁定)之外是否还存在其他潜在的瓶颈。我从我的程序中删除了synchronized
和volatile
等所有指标。
我使用java.util.concurrent
实用程序,并将数据拆分为独立的线程数组。
答案 0 :(得分:3)
您可以做的最有用的想法是确保您的线程执行长序列的独立工作。这些序列需要明显长于您可能产生的开销(比如说1到10微秒)
一个常见的错误是将工作分解得太精细(在此过程中产生大量开销)。每个核心只需要一个任务来保持每个核心的忙碌。
如果没有关于你要做什么以及如何分解你工作的大部分细节,很难提出更具体的建议。
答案 1 :(得分:2)
您可以使用JProfiler运行应用程序来检测实际的瓶颈。 JProfiler将在加载时检测您的字节代码,并让您深入了解应用程序内存消耗,运行时性能等。
答案 2 :(得分:0)
您可以查看Disruptor,即使只是阅读他们的技术论文,该论文深入探讨了这一主题。