Предположим, что лямбда-выражение потребляет определенное количество ресурса (например, памяти), которое ограничено, и требует ограничить количество одновременных исполнений (пример: если лямбда временно потребляет 100 МБ (локальной памяти), и нам нравится ограничивать это до 1 ГБ, мы не допускаем более 10 параллельных оценок).
Каков наилучший способ ограничить количество одновременных действий, например, например, в
IntStream.range(0, numberOfJobs).parallel().foreach( i -> { /*...*/ });
?
Примечание. Очевидным вариантом является выполнение вложенности типа
double jobsPerThread = (double)numberOfJobs / numberOfThreads;
IntStream.range(0, numberOfThreads).parallel().forEach( threadIndex ->
IntStream.range((int)(threadIndex * jobsPerThread), (int)((threadIndex+1) * jobsPerThread)).sequential().forEach( i -> { /*...*/ }));
Это единственный способ? Это не так элегантно. На самом деле я хотел бы иметь
IntStream.range(0, numberOfJobs).parallel(numberOfThreads).foreach( i -> { /*...*/ });