Basisprincipes van multithreading

Code optimaliseren in Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Sequentieel vs. parallel uitvoeren

  • Sequentiële verwerking -> bewerkingen na elkaar
  • Parallelle verwerking -> meerdere bewerkingen tegelijk

Hoe?

  • Moderne CPU’s hebben meerdere cores
  • Thread: kleinste eenheid van uitvoering
  • Multithreading verdeelt werk over deze cores

Eén thread is een eenbaansweg: auto’s volgen elkaar. Meerdere threads zijn meerbaans: auto’s rijden tegelijk!

Code optimaliseren in Java

Threads gebruiken

  • Met de Thread-klasse maak je nieuwe uitvoeringspaden
  • Elke Thread draait onafhankelijk
Runnable task = () -> {
    System.out.println("Processing on thread: " + 
                       Thread.currentThread().getName());
};

Thread thread = new Thread(task);
thread.start();
Processing on thread: Thread-0
Code optimaliseren in Java

Werken met meerdere threads

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
Code optimaliseren in Java

Parallelle streams

  • Streams: sinds Java 8 voor eenvoudige parallelisatie
  • Maakt en beheert threads automatisch
  • Twee manieren om te starten:
    • collection.parallelStream()
    • Stream.of(...).parallel()
Code optimaliseren in Java

Voorbeeld: parallelle streams

// 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());
Code optimaliseren in Java

Wanneer parallel verwerken?

  • CPU-intensieve taken
  • Onafhankelijke dataverwerking
  • Grote datasets
  • Beschikbare CPU-cores > 1
  • Paralleliseren loont niet altijd bij:
    • Kleine datasets
    • Eenvoudige operaties
Code optimaliseren in Java

Samenvatting

  • Thread-klasse om parallelle paden te maken
  • Parallel streams voor eenvoudiger collectieprocessing
  • Voordeel hangt af van:
    • Type workload
    • Datagrootte
    • Aantal cores
Code optimaliseren in Java

Laten we oefenen!

Code optimaliseren in Java

Preparing Video For Download...