我想知道是否有人能告诉我当你拥有比核心更多的线程时java如何处理多线程?例如,我有一个四核,但我的程序使用8个线程。
我只是在问,因为我想做一些并行编程。我想用它来提高数组的性能。
感谢您的帮助。
编辑: 为了澄清,我将使用并行编程来按核心数量来划分数组。所以我有一个约50K的数组,希望使用PP来提高性能并增加数组大小。
答案 0 :(得分:4)
可以让我知道java如何处理多线程
它没有(除非你有绿色线程,而且大多数人都没有)。操作系统进行调度。
我有四核,但我的程序使用8个线程。
如果您有超线程,他们都可以立即运行。顺便说一句你可能每个CPU只有1个线程用于GC,还有许多其他线程,即使你没有自己创建。
我想做一些并行编程。想要用它来提高数组的性能
我建议您将忙线程数保持为您拥有的逻辑CPU数量。事实上,有一个库,可以帮助你做这样的内置,例如DoubleStream
double[] manyDoubles = ....
DoubleSummaryStatistics dss =
DoubleStream.of(manyDouble)
.parallel()// do stuff in parallel using all the CPUS
.filter(x -> x >= 1)
.map(x -> x * x)
.summaryStatistics();