Dasitha sandaruwan Ответов: 1

Как вызвать метод одновременно для каждого элемента в списке с помощью java stream API или многопоточности


Я хочу вызвать ниже calculation() одновременно в calculateKalmanValues() для каждого элемента в списке movingbeacons, чтобы сократить время обработки. Я думаю, что java stream.parallel () - это идеальное решение.
public void calculation(){
           // do some think
       }

// This is the method which I call calculation()
//for each element in the  movingBeacons list simultaneously should called the calculation method

   public void calculateKalmanValues()  {
       List<string> movingBeacons=incomingBtRssiRepository.movingBeacons();

       movingBeacons.forEach.parallel()?????
С помощью java stream.parallel() или многопоточности.

Что я уже пробовал:

Я попытался использовать метод java stream.parallel (), но мне не удалось настроить его правильно,
я хочу избежать вызова метода один за другим и параллельно вызывать и запускать метод для всех элементов в списке.

1 Ответов

Рейтинг:
0

OriginalGriff

Вы не можете - или, по крайней мере, очень маловероятно, что вы можете, если список не очень короткий.

Нарезание резьбы-это не "волшебная пуля", которая сразу же делает все быстрее. Для работы каждого потока требуется свободное ядро, и когда число потоков во всей системе превышает число ядер, потоки приостанавливаются в ожидании освобождения ядра. Таким образом, в идеальном мире вы можете одновременно выполнять столько же вычислений, сколько у вас ядер в процессоре yoru. Но... это не идеально, ОС будет запускать N потоков одновременно для выполнения "связанной с ОС" обработки, и эти потоки также используют один и тот же набор ядер.

На практике, если вы создаете слишком много потоков, вы можете даже замедлить обработку, потому что для создания, переключения и завершения потоков требуются ядра, а это требует времени - и каждый поток требует своего собственного стека, поэтому он также использует больше памяти, и если это превышает физическую память, доступную всей системе, то он начинает выгружаться на диск, и это само по себе замедлит ваш код на огромные объемы.

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