หลักการ multi-threading เบื้องต้น

การปรับแต่งโค้ดใน Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

การประมวลผลแบบลำดับ vs แบบขนาน

  • การประมวลผลแบบลำดับ -> ทำทีละขั้นตอน
  • การประมวลผลแบบขนาน -> ทำหลายขั้นตอนพร้อมกัน

ทำได้อย่างไร?

  • CPU สมัยใหม่มีหลาย core
  • Thread: หน่วยย่อยที่สุดในการรันโปรแกรม
  • Multi-threading กระจายงานไปยัง core ต่าง ๆ

Single-threading เหมือนถนนเลนเดียวที่รถต้องวิ่งตามกัน Multi-threading เหมือนถนนหลายเลนที่รถวิ่งพร้อมกันได้!

การปรับแต่งโค้ดใน Java

การใช้งาน Thread

  • คลาส Thread ใช้สร้างเส้นทางการรันใหม่
  • แต่ละ Thread ทำงานได้อิสระ
Runnable task = () -> {
    System.out.println("Processing on thread: " + 
                       Thread.currentThread().getName());
};

Thread thread = new Thread(task);
thread.start();
Processing on thread: Thread-0
การปรับแต่งโค้ดใน Java

การทำงานกับหลาย 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
การปรับแต่งโค้ดใน Java

Parallel streams

  • Streams — ฟีเจอร์ Java 8+ สำหรับการประมวลผลแบบขนานที่ใช้งานง่าย
  • จัดการการสร้างและควบคุม Thread โดยอัตโนมัติ
  • สร้างได้ 2 วิธี:
    • collection.parallelStream()
    • Stream.of(...).parallel()
การปรับแต่งโค้ดใน Java

ตัวอย่าง parallel 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());
การปรับแต่งโค้ดใน Java

ควรใช้การประมวลผลแบบขนานเมื่อไหร่

  • งานที่ใช้ CPU เข้มข้น
  • การประมวลผลข้อมูลที่เป็นอิสระต่อกัน
  • ชุดข้อมูลขนาดใหญ่
  • มี CPU core มากกว่า 1
  • ค่าใช้จ่ายในการแบ่งงานแบบขนานอาจไม่คุ้มค่าสำหรับ:
    • ชุดข้อมูลขนาดเล็ก
    • งานที่ไม่ซับซ้อน
การปรับแต่งโค้ดใน Java

สรุป

  • คลาส Thread สำหรับสร้างเส้นทางการรันแบบขนาน
  • Parallel streams สำหรับประมวลผล collection อย่างง่าย
  • ประโยชน์ขึ้นอยู่กับ:
    • ประเภทของงาน
    • ขนาดข้อมูล
    • จำนวน core ที่มี
การปรับแต่งโค้ดใน Java

มาฝึกกันเถอะ!

การปรับแต่งโค้ดใน Java

Preparing Video For Download...