Распараллелить программу Java
Как распараллелить программу на Java, чтобы время выполнения параллельной версии было (намного) меньше времени выполнения программы без потоков? Я пробовал например ExecutorService
( "Parallel.For" для Java?), Но он работает примерно в 3 раза дольше
Проблема в том, что я использую потоки в Java неправильно или нереально получить ускорение в 2 раза с 2 ядрами (возможно ли это с 4 ядрами?)?
PS мне нужно распараллелить while
петля
2 ответа
Многопоточное программирование полезно в следующих ситуациях:
- Многоядерные системы необходимы при интенсивной работе с памятью (не нужны при длительных операциях ввода-вывода, подобных приведенным ниже)
- Операции с базой данных (выполнять запросы)
- Сетевые операции (например, отправка файла или вызов веб-службы)
- Файловые операции (чтение, запись в файл)
Если вы не находитесь в одной из предыдущих ситуаций, добавление многопоточности приводит к замедлению работы приложения из-за накладных расходов при переключении между процессами.
Я бы порекомендовал вам этот поток, так как он довольно подробно описывает эту тему: [ Потоки Java 8: почему параллельный поток медленнее?
Короче говоря, параллелизм вносит накладные расходы и усложняет любой процесс, и хотя при распараллеливании, безусловно, есть выгоды, которые он может получить, он не будет работать с 2 потоками на 2 ядрах = в 2 раза быстрее.