Nguyên tắc cơ bản về đa luồng

Tối ưu hóa mã trong Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Thực thi tuần tự vs song song

  • Xử lý tuần tự -> thao tác chạy lần lượt
  • Xử lý song song -> nhiều thao tác chạy đồng thời

Cách hoạt động?

  • CPU hiện đại có nhiều lõi
  • Thread: đơn vị thực thi nhỏ nhất
  • Đa luồng phân phối công việc lên các lõi này

Xử lý đơn luồng như đường một làn: xe phải nối đuôi. Đa luồng như nhiều làn: xe chạy song song.

Tối ưu hóa mã trong Java

Dùng thread

  • Lớp Thread cho phép tạo đường thực thi mới
  • Mỗi Thread có thể chạy độc lập
Runnable task = () -> {
    System.out.println("Processing on thread: " + 
                       Thread.currentThread().getName());
};

Thread thread = new Thread(task);
thread.start();
Processing on thread: Thread-0
Tối ưu hóa mã trong Java

Làm việc với nhiều thread

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
Tối ưu hóa mã trong Java

Parallel Stream

  • Stream - tính năng Java 8+ cho song song hóa đơn giản
  • Tự động tạo và quản lý thread
  • Hai cách tạo:
    • collection.parallelStream()
    • Stream.of(...).parallel()
Tối ưu hóa mã trong Java

Ví dụ về Parallel Stream

// 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());
Tối ưu hóa mã trong Java

Khi nào dùng xử lý song song

  • Tác vụ nặng CPU
  • Xử lý dữ liệu độc lập
  • Tập dữ liệu lớn
  • Số lõi CPU khả dụng > 1
  • Chi phí song song hóa có thể không đáng với:
    • Tập dữ liệu nhỏ
    • Tác vụ đơn giản
Tối ưu hóa mã trong Java

Tóm tắt

  • Lớp Thread để tạo luồng thực thi song song
  • Parallel Stream để đơn giản hóa xử lý bộ sưu tập
  • Lợi ích phụ thuộc vào:
    • Loại khối lượng công việc
    • Kích thước dữ liệu
    • Số lõi khả dụng
Tối ưu hóa mã trong Java

Ayo berlatih!

Tối ưu hóa mã trong Java

Preparing Video For Download...