我需要一些容易实现的计算密集型任务和内存密集型任务,可以用Java编写,用于测试线程调度器。
它们应该稍微耗费时间,但更重要的是占用资源。
有什么建议吗?
我需要一些容易实现的计算密集型任务和内存密集型任务,可以用Java编写,用于测试线程调度器。
它们应该稍微耗费时间,但更重要的是占用资源。
有什么建议吗?
几个CPU密集型任务的简单示例:
矩阵相乘。矩阵应该很大并存储在磁盘上。
字符串搜索。或者索引一个巨大的文档(检测和计算每个单词或字母串的出现次数)。例如,您可以索引一个大型软件项目源代码中的所有标识符。
计算圆周率。
旋转2D矩阵或图像。
压缩一些巨大的文件。
...
在PDP-11上进行的CPU浸泡测试是tan(atan(tan(atan(...)))
等。这会很大程度地使用FPU以及堆栈和寄存器。
计算斐波那契数列的第n项,其中n大于70。(时间消耗较高)
计算大数的阶乘。(时间消耗较高)
在图中找到两个节点之间的所有可能路径。(内存消耗较高)
@Test
public void testCreateMultipleThreadsWithDifferentPriorities() throws Exception {
class MyRunnable implements Runnable {
@Override
public void run() {
for (int i=0; i<1_000_000; i++) {
double d = tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(123456789.123456789))))))))));
cbrt(d);
}
LOGGER.debug("I am {}, and I have finished", Thread.currentThread().getName());
}
}
final int NUMBER_OF_THREADS = 32;
List<Thread> threadList = new ArrayList<Thread>(NUMBER_OF_THREADS);
for (int i=1; i<=NUMBER_OF_THREADS; i++) {
Thread t = new Thread(new MyRunnable());
if (i == NUMBER_OF_THREADS) {
// Last thread gets MAX_PRIORITY
t.setPriority(Thread.MAX_PRIORITY);
t.setName("T-" + i + "-MAX_PRIORITY");
} else {
// All other threads get MIN_PRIORITY
t.setPriority(Thread.MIN_PRIORITY);
t.setName("T-" + i);
}
threadList.add(t);
}
threadList.forEach(t->t.start());
for (Thread t : threadList) {
t.join();
}
}