parallel-processing - 在四个CPU核心/八个CPU线程上执行单个程序

标签 parallel-processing performance java

我想在四核 i7 CPU 上执行(Java 7)以下算法,以便后者 100% 专用于执行它。

long n = 1000000;
int a = 5;
long sum = 0;

for (long i = 1; i <= n; i ++) {
    for (long j = 1; j <= i; j ++) {
        for (long k = 1; k <= j; k *= a) {
            sum ++;
        }
    }
}
System.out.println("Sum = " + sum);

我已经利用了手动解决方案(java.util.concurrent.Executorsjava.util.concurrent.FutureTask ...),我将在其中创建四个任务:

  • 第一个将在 1 到 n/4 范围内执行;
  • 第二个将在 (n/4 + 1) 到 n/2 范围内执行;
  • 第三个将在 (n/2 + 1) 到 3n/4 范围内执行;
  • 第四个将在 (3n/4 + 1) 到 n 的范围内执行。

我想知道是否有一个简单/自动的解决方案来命令操作系统(我使用的是 Windows)在执行该程序时专用“所有”可用的 CPU 资源?

最佳答案

我不知道这在 Java 或 Windows 下是否可用。在 UNIX 类型操作系统下的 C/C++ 中,您可以(使用适当的权限)将应用程序的优先级重新设置为负优先级。负优先级通常称为“实时优先级”,因为操作系统不会调整它们,并且它们的优先级将高于(几乎)系统上的其他所有内容。

我认为在 Java 中你能做的最好的事情就是使用 Runtime.getRuntime().availableProcessors() 方法来确定你有多少个处理器,并至少分配那么多线程。

关于parallel-processing - 在四个CPU核心/八个CPU线程上执行单个程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24838198/

相关文章:

java - 如何在 Hibernate 拦截器中获取 Hibernate session ?

c++ - 3个平行区域

c++ - 具有C++ 11多线程的特征库

c++ - 串行代码的并行 MPI 实现

python - 如何提高python导入速度?

java - 如何修复 JLabel 透明度错误?

java - 如何使用 android.test.mock MockContext?

java - Java 如何利用多核?

jquery - 哪种 jQuery 方法可以更好地自动适应父 DIV 宽度的子项?

java - 对于大型 ByteBuffer,单独 SocketChannel 的并发 read() 速度较慢