Optymalizacja przetwarzania obrazów za pomocą strumieni równoległych
Pracujesz nad aplikacją do przetwarzania obrazów, która stosuje filtry na dużych partiach plików. Obecnie aplikacja przetwarza obrazy sekwencyjnie, co staje się wąskim gardłem wraz ze wzrostem ich liczby. Twoim zadaniem jest zaimplementowanie rozwiązania opartego na strumieniu równoległym w celu poprawy wydajności.
Klasa Image została wcześniej załadowana.
To ćwiczenie jest częścią kursu
Optymalizacja kodu w Javie
Instrukcje do ćwiczenia
- Przekształć strumień w strumień równoległy, aby przyspieszyć przetwarzanie.
- Zastosuj filtry do wszystkich obrazów w strumieniu.
- Zebranie obrazów do jednej listy.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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;
}
}