Я недавно унаследовал небольшую Java-программу, которая берет информацию из большой базы данных, выполняет некоторую обработку и создает подробное изображение этой информации. Первоначальный автор написал код, используя один поток, а затем изменил его, чтобы он мог использовать несколько потоков.
В коде он определяет константу;
// number of threads
public static final int THREADS = Runtime.getRuntime().availableProcessors();
Который затем устанавливает количество потоков, используемых для создания изображения.
Я понимаю его рассуждение о том, что количество потоков не может быть больше количества доступных процессоров, поэтому установите его на величину, позволяющую полностью использовать потенциал процессора (ов). Это правильно? или есть лучший способ использовать весь потенциал процессора (ов)?
РЕДАКТИРОВАТЬ: Чтобы дать больше разъяснений, конкретный алгоритм, который является потоком, масштабируется до разрешения создаваемого изображения (1 поток на пиксель). Это, очевидно, не лучшее решение, хотя. Работа, выполняемая этим алгоритмом, заключается в том, что она занимает все время и является исключительно математическими операциями, здесь нет блокировок или других факторов, которые могут привести к тому, что какой-либо конкретный поток будет спать. Я просто хочу максимально увеличить загрузку ЦП программ, чтобы сократить время их завершения.