我的Java应用程序本质上是这样做的:
这是一个应用程序,应该实现一个理论上100%的提速每个核心,但相反,更多的线程处理信息,它得到的速度越慢!
示例:
H 119等H 220F 221
发布于 2012-05-14 16:18:37
在添加线程时获得这样的性能意味着您正在做一些非常错误的事情。通常,添加线程不会提供任何速度改进,有时可能会对您造成一些处罚,但是添加另一个线程并使程序运行时间翻倍是非常不寻常的。
下面是一些要调查的事情:
正如评论中所提到的
ExecutorService而不是自己管理线程。这通常会删除大量的用户代码和相关的bug。看到Executors.newFixedThreadPool(numThread).new Thread(...).start()而不是调用run() run()您调用join()吗?您应该对所有线程进行start(),将行分派给它们,然后在它们的末尾进行join()。如果您在问题中向我们展示了您的一些线程代码,我们可以提供更多帮助。
发布于 2012-05-14 19:09:45
没有经过充分优化的代码通常会耗尽整个内存带宽。在多核处理器上添加使用相同的未优化代码的另一个线程,它们将在多核处理器之间分配带宽,此外,它们还会经常相遇,进一步减慢速度。
格雷说:“.程序运行时间翻倍是非常不寻常的。”我不同意。这通常发生在C代码中,然后才开始优化内存访问。我想说,从一开始就没有看到经济放缓是非常不寻常的。
我不知道Java是否可以使用抽样,但这是一个显而易见的起点。
https://stackoverflow.com/questions/10587059
复制相似问题