Распараллелить программу Java

Как распараллелить программу на Java, чтобы время выполнения параллельной версии было (намного) меньше времени выполнения программы без потоков? Я пробовал например ExecutorService ( "Parallel.For" для Java?), Но он работает примерно в 3 раза дольше

Проблема в том, что я использую потоки в Java неправильно или нереально получить ускорение в 2 раза с 2 ядрами (возможно ли это с 4 ядрами?)?

PS мне нужно распараллелить while петля

2 ответа

Многопоточное программирование полезно в следующих ситуациях:

  • Многоядерные системы необходимы при интенсивной работе с памятью (не нужны при длительных операциях ввода-вывода, подобных приведенным ниже)
  • Операции с базой данных (выполнять запросы)
  • Сетевые операции (например, отправка файла или вызов веб-службы)
  • Файловые операции (чтение, запись в файл)

Если вы не находитесь в одной из предыдущих ситуаций, добавление многопоточности приводит к замедлению работы приложения из-за накладных расходов при переключении между процессами.

Я бы порекомендовал вам этот поток, так как он довольно подробно описывает эту тему: [ Потоки Java 8: почему параллельный поток медленнее?

Короче говоря, параллелизм вносит накладные расходы и усложняет любой процесс, и хотя при распараллеливании, безусловно, есть выгоды, которые он может получить, он не будет работать с 2 потоками на 2 ядрах = в 2 раза быстрее.

Другие вопросы по тегам