我们使用的是Java 7并且正在开发多线程数据处理应用程序。由于某些限制,我们不使用spark或任何其他map-reduce方法来解决此问题。这个项目的想法是最大化使用多线程的应用程序的性能。Java线程数量>内核数量和垃圾回收数量
我的理解是,在任何给定的点上,考虑到CPU除了OS之外没有其他任何东西运行,同时工作的线程数量将等于CPU提供的超线程数量。但是有一些java GC可以随时使用。我们也必须考虑这一点。
此外,我知道,如果我创建更多的线程,然后实际上会降低性能,因为花费在上下文切换上的时间。
问题是考虑所有这些事情并创建适当数量的线程的最佳方式是什么。任何想法或思考过程?我应该考虑其他过程吗?
那么,fork-join框架在Java 7上是可用的。 –
@SleimanJneidi fork-join可用,但使用正确很痛苦。如果你想使用Fork-Join,我强烈建议使用Java 8来为你做这件事。即不要直接使用它,除非你真的知道你在做什么。例如如果你想用fork-join矩阵乘法,请复制Doug Lea的实现。 –
确实如此,但它比fixedThreadPool更具可扩展性我想 –