Temel çok iş parçacıklı çalışma ilkeleri

Java'da Kod Optimizasyonu

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Ardışık vs paralel yürütme

  • Ardışık işleme -> işlemler teker teker gerçekleşir
  • Paralel işleme -> birden çok işlem aynı anda gerçekleşir

Nasıl?

  • Modern CPU'larda birden çok çekirdek vardır
  • İş parçacığı: program yürütmenin en küçük birimi
  • Çok iş parçacıklılık, işi bu çekirdeklere dağıtır

Tek iş parçacığı tek şeritli yola benzer; arabalar sırayla gider. Çok iş parçacığı çok şeritli yoldur; arabalar aynı anda ilerler!

Java'da Kod Optimizasyonu

İş parçacıklarını kullanma

  • Thread sınıfı yeni yürütme yolları oluşturmayı sağlar
  • Her Thread bağımsız çalışabilir
Runnable task = () -> {
    System.out.println("Processing on thread: " + 
                       Thread.currentThread().getName());
};

Thread thread = new Thread(task);
thread.start();
Processing on thread: Thread-0
Java'da Kod Optimizasyonu

Birden çok iş parçacığı ile çalışma

List<Thread> threads = new ArrayList<Thread>();
for (int i = 0; i < 4; i++) {
    Thread thread = new Thread(() -> System.out.println("Processing data on Thread-" + i));
    threads.add(thread);
    thread.start();
}

for (Thread t : threads) {
    t.join(); // Waits for all threads to complete
}
// Processing data on Thread-0
// Processing data on Thread-2
// Processing data on Thread-1
// Processing data on Thread-3
Java'da Kod Optimizasyonu

Paralel akışlar

  • Akışlar: paralellik için Java 8+ özelliği
  • İş parçacığı oluşturma ve yönetimini otomatik yapar
  • İki oluşturma yolu:
    • collection.parallelStream()
    • Stream.of(...).parallel()
Java'da Kod Optimizasyonu

Paralel akış örneği

// Sequential processing
List<Integer> result1 = new ArrayList<>();
for (int i = 0; i < numbers.size(); i++) {
    result1.add(numbers.get(i) * 2);
}

// Sequential processing with stream List<Integer> result2 = numbers.stream() .map(n -> n * 2) .collect(Collectors.toList());
// Parallel processing with parallel stream List<Integer> result3 = numbers.parallelStream() .map(n -> n * 2) .collect(Collectors.toList());
Java'da Kod Optimizasyonu

Paralel işlemi ne zaman kullanmalı

  • CPU yoğun işlemler
  • Bağımsız veri işleme
  • Büyük veri koleksiyonları
  • Kullanılabilir CPU çekirdeği > 1
  • Paralelleştirme maliyeti şu durumlarda değmeyebilir:
    • Küçük veri kümeleri
    • Basit işlemler
Java'da Kod Optimizasyonu

Özet

  • Paralel yürütme yolları oluşturmak için Thread sınıfı
  • Koleksiyonları sadeleştirilmiş şekilde işlemek için paralel akışlar
  • Yararlar şunlara bağlıdır:
    • İş yükü türü
    • Veri boyutu
    • Mevcut çekirdek sayısı
Java'da Kod Optimizasyonu

Haydi pratik yapalım!

Java'da Kod Optimizasyonu

Preparing Video For Download...