Оптимізація обробки зображень за допомогою паралельних потоків
Ви працюєте над застосунком для обробки зображень, який застосовує фільтри до великих пакетів зображень. Нині застосунок обробляє зображення послідовно, але це стає вузьким місцем із зростанням кількості зображень. Ваше завдання — реалізувати рішення на основі паралельного потоку, щоб підвищити продуктивність.
Клас Image уже завантажено для вас.
Ця вправа є частиною курсу
Оптимізація коду в Java
Інструкції до вправи
- Перетворіть потік на паралельний для швидшої обробки.
- Застосуйте фільтри до всіх зображень у потоці.
- Зберіть зображення в єдиний список.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
public class ImageProcessor {
public static void main(String[] args) {
List images = generateImages(500);
List result = images
// Use a parallel stream for multi-thread processing
.____()
// Apply filters to each image using `map()`
.____(image -> applyFilters(image))
// Collect images to a single list
.____(Collectors.toList());
}
static Image applyFilters(Image image) {
image = blur(image);
image = sharpen(image);
return image;
}
static Image blur(Image image) {
process(); return new Image(image.id, image.width, image.height);
}
static Image sharpen(Image image) {
process(); return new Image(image.id, image.width, image.height);
}
static void process() {
for (int i = 0; i < 100000; i++) {
double result = Math.sin(i) * Math.cos(i);
}
}
static List generateImages(int count) {
List list = new ArrayList<>();
for (int i = 0; i < count; i++) {
list.add(new Image(i, 1920, 1080));
}
return list;
}
}