Paralel Akışlar Oluşturma
parallel() ve parallelStream()
Paralel Akışlar Oluşturma, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Paralel Akışların Yaptığı
Bir paralel akış, verilerini böler ve parçaları birden çok iş parçacığında işler, ardından sonuçları birleştirir. Amaç, büyük iş yüklerinde işlem hacmini artırmaktır.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sum = IntStream.rangeClosed(1, 1000)
.parallel()
.sum();
System.out.println(sum);
}
}Mevcut stream üzerinde parallel()
parallel() çağrısı, sıralı bir stream'i paralel hâle getirir. İşlem hattının herhangi bir yerinde bulunabilir.
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> nums = List.of(1, 2, 3, 4, 5);
int total = nums.stream()
.parallel()
.mapToInt(Integer::intValue)
.sum();
System.out.println(total);
}
}Koleksiyonlarda parallelStream()
Collection.parallelStream(), doğrudan bir paralel stream oluşturur; bu, stream().parallel() kullanımının kısa yoludur.
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> words = List.of("a", "bb", "ccc");
int chars = words.parallelStream()
.mapToInt(String::length)
.sum();
System.out.println(chars);
}
}Sıralı İşleme Dönme
sequential(), bir stream'i tek iş parçacıklı çalışmaya döndürür. Tüm işlem hattı için parallel() veya sequential() çağrılarından sonuncusu geçerlidir.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sum = IntStream.rangeClosed(1, 100)
.parallel()
.sequential()
.sum();
System.out.println(sum);
}
}isParallel Denetimi
isParallel(), bir stream'in paralel çalışıp çalışmayacağını bildirir.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
System.out.println(IntStream.range(0, 10).isParallel());
System.out.println(IntStream.range(0, 10).parallel().isParallel());
}
}Aynı Sonuç, Farklı Çalışma Biçimi
Toplam gibi birleşme özelliğine sahip işlemlerde paralel ve sıralı stream'ler aynı sonucu döndürür. Yalnızca çalışma stratejisi farklıdır.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int seq = IntStream.rangeClosed(1, 50).sum();
int par = IntStream.rangeClosed(1, 50).parallel().sum();
System.out.println(seq == par);
}
}Ortak ForkJoinPool
Paralel stream'ler paylaşılan ForkJoinPool.commonPool() havuzunu kullanır. Varsayılan boyutu, kullanılabilir işlemci sayısının bir eksiğidir.
public class Main {
public static void main(String[] args) {
System.out.println(Runtime.getRuntime().availableProcessors());
}
}İş Parçacıklarının Sırası Garanti Edilmez
forEach kullanıldığında, parçalar farklı zamanlarda tamamlandığı için paralel stream'ler çıktıyı herhangi bir sırada yazdırabilir. Sıra önemliyse forEachOrdered kullanın.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.rangeClosed(1, 5)
.parallel()
.forEachOrdered(System.out::println);
}
}İndirgeme Kısmi Sonuçları Birleştirir
Arka planda paralel indirgeme, her parça için kısmi sonuçlar hesaplar ve bunları birleştiriciyle birleştirir. Doğru çalışması için işlem birleşme özelliğine sahip olmalıdır.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int product = IntStream.rangeClosed(1, 6)
.parallel()
.reduce(1, (a, b) -> a * b);
System.out.println(product);
}
}Paralel Toplama
Toplayıcı çerçevesi, kısmi kapsayıcıları birleştirerek paralel toplamayı destekler. groupingBy, paralel çalışmada doğru sonuç verir.
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> words = List.of("apple", "banana", "avocado", "cherry");
Map<Character, List<String>> byFirst = words.parallelStream()
.collect(Collectors.groupingBy(w -> w.charAt(0)));
System.out.println(byFirst);
}
}Her Stream Daha Hızlı Olmaz
Paralelliği etkinleştirmek kolaydır ancak her zaman yararlı değildir. Küçük veri kümeleri veya ucuz işlemler, bölme ve birleştirme ek yükü nedeniyle paralel çalışmada daha yavaş olabilir.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
long count = IntStream.rangeClosed(1, 10)
.parallel()
.filter(n -> n % 2 == 0)
.count();
System.out.println(count);
}
}Hızlı Kontrol
Paralel stream'leri varsayılan olarak hangi iş parçacığı havuzu çalıştırır?
Özet
Paralel stream'ler oluşturdunuz:
parallel()herhangi bir stream'i dönüştürür;parallelStream()ise koleksiyonlar için kısa yoldur.sequential()sıralı çalışmaya döndürür; son çağrı geçerlidir.- Bunlar paylaşılan
ForkJoinPool.commonPool()üzerinde çalışır. - Birleşme özelliğine sahip işlemlerde sonuçlar sıralı çalışmayla aynıdır; ancak sıra ve hız garanti edilmez.
Sıkça Sorulan Sorular
“Paralel Akışlar Oluşturma” dersi ücretsiz mi?
Evet — “Paralel Akışlar Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Paralel Akışlar Oluşturma” dersinde ne öğreneceğim?
parallel() ve parallelStream() Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Paralel Akışlar Oluşturma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Paralel Akışlar Oluşturma
- Paralellik Ne Zaman Yararlıdır
- İş Parçacığı Güvenliği ve Yan Etkiler
- Yaygın Tuzaklar