最近我继承了一个小的Java程序,它从一个大型数据库中获取信息,进行一些处理并生成有关该信息的详细图像。原作者使用单个线程编写了代码,然后稍后对其进行了修改,以允许它使用多个线程。
在代码中,他定义了一个常量;
// number of threads
public static final int THREADS = Runtime.getRuntime().availableProcessors();
然后设置用于创建图像的线程数量。
我理解他的想法是线程数不能大于可用处理器的数量,因此将其设置为可以充分发挥处理器潜力的数量。这正确吗?还是有更好的方法来利用处理器的全部潜力?
编辑:为了更明确一些,正在进行多线程处理的特定算法会按比例缩放所创建图片的分辨率(每个像素一个线程)。显然,这不是最佳解决方案。该算法所做的工作是耗时的数学运算,没有锁或其他因素会导致任何给定线程休眠。我只想最大化程序的 CPU 利用率以缩短完成时间。