我想在四核 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.Executors、java.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/