Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OOP2 - Multiprocessing

OOP2 - Multiprocessing

More Decks by Manatsawin Hanmongkolchai

Other Decks in Programming

Transcript

  1. Race condition Start Balance > amount? Balace -= amount End

    Yes No Balance = 500 Amount = 500 Start Balance > amount? Balace -= amount End Yes No Thread 1 Thread 2
  2. Race condition Start Balance > amount? Yes Start Balance >

    amount? Balace -= amount End Yes Thread 1 Thread 2 Balance = 500
  3. Race condition Start Balance > amount? Yes Start Balance >

    amount? Balace -= amount End Yes Thread 1 Thread 2 Balance = 0
  4. Race condition Start Balance > amount? Yes Balance = 0

    Start Balance > amount? Balace -= amount End Yes No Thread 1 Thread 2
  5. Race condition Start Balance > amount? Balace -= amount End

    Yes Start Balance > amount? Balace -= amount End Yes No Thread 1 Thread 2 Balance = -500
  6. Race condition Start Balance > amount? Balace -= amount End

    Yes Balance = 0 Start Thread 1 Thread 2
  7. Race condition Start Balance > amount? Balace -= amount End

    Yes Balance = 0 Start Balance > amount? End No Thread 1 Thread 2
  8. Divide and Conquer Cake 250 g Cake 250 g Cake

    250 g Cake 250 g Cake 125 g Cake 125 g
  9. Fork-Join • Fork = แบ่งงานกันไปทำ • Join = รวมงาน รายงาน

    ระบบสุริยะฯ โลก ดวงอาทิตย์ ดาวพุธ ดาวศุกร์ งาน Fork สารบัญ ดวงอาทิตย์...........1 โลก…………….8 ดาวพุธ.................12 ดาวศุกร์...............15 Join
  10. Interrupt • เวลา Join/Sleep อาจเกิด InterruptedException • เธรดอื่นสามารถ “ปลุก” เธรดที่

    join/sleep อยู่ได้ โดยการสั่ง interrupt() • ใช้แจ้งให้ทำงานอื่นต่อ (เช่น อัพเดต % การทำงาน)
  11. Thread pool • การ start thread ใหม่ใช้เวลา • Thread pool

    คือการ recycle thread ที่ทำงานเสร็จ แล้วมาใช้งานใหม่ (คล้ายๆ master-slave)
  12. ExecutorService • อยู่ใน java.util.concurrent.ExecutorService • ใช้จัดการคิวงาน: • ใส่งานลงในคิวด้วยคำสั่ง submit
 futuresList.add(eservice.submit(new

    Task(index))); • จะได้คำตอบเป็นตัวแปรชนิด Future • ExecutorService จะจัดการการ start thread, การของานในคิวโดยอัตโนมัติ
  13. CompletionService • เหมือน ExecutorService • แต่เก็บ Future ให้อัตโนมัติ • มีเมธอด

    take() รอจนกว่าจะมีงานเสร็จสดๆ ร้อนๆ แล้วคืน Future นั้นออกมา
 
 taskResult = cservice.take().get();
  14. Callback pattern • ไม่ใช้ Future • บอกตัวแม่เมื่อทำงานเสร็จแล้ว
 
 // starting

    task
 CallBackTask task = new CallBackTask(i);
 task.setCaller(this);
 // in task
 callBackTest.callBack(seq);
  15. RecursiveTask ใช้เขียน Fork/Join
 
 class Fibonacci extends RecursiveTask<Integer> {
 public

    final int n;
 public Fibonacci(int n) { this.n = n; }
 public Integer compute() {
 if (n <= 1)
 return n;
 Fibonacci f1 = new Fibonacci(n - 1);
 f1.fork();
 Fibonacci f2 = new Fibonacci(n - 2);
 return f2.compute() + f1.join();
 }
 } เหมือน run() ใน Runnable
  16. MapReduce A ไทย 30 สังคม 20 B ไทย 40 สังคม

    15 C ไทย 10 สังคม 10 D ไทย 20 สังคม 20
  17. MapReduce A ไทย 30 สังคม 20 B ไทย 40 สังคม

    15 C ไทย 10 สังคม 10 D ไทย 20 สังคม 20 Score = 20 Count = 1 Score = 15 Count = 1 Score = 10 Count = 1 Score = 20 Count = 1 Map
  18. MapReduce A ไทย 30 สังคม 20 B ไทย 40 สังคม

    15 C ไทย 10 สังคม 10 D ไทย 20 สังคม 20 Score = 20 Count = 1 Score = 15 Count = 1 Score = 10 Count = 1 Score = 20 Count = 1 Reduce Score = 35 Count = 2 Score = 30 Count = 2 Score = 65 Count = 4
  19. MapReduce A ไทย 30 สังคม 20 B ไทย 40 สังคม

    15 C ไทย 10 สังคม 10 D ไทย 20 สังคม 20 Subject=Social Score = 20 Count = 1 Subject=Social Score = 15 Count = 1 Subject=Social Score = 10 Count = 1 Subject=Social Score = 20 Count = 1 Subject=Thai Score = 30 Count = 1 Subject=Thai Score = 40 Count = 1 Subject=Thai Score = 10 Count = 1 Subject=Thai Score = 20 Count = 1
  20. MapReduce Subject=Social Score = 35 Count = 2 Subject=Social Score

    = 30 Count = 2 Subject=Thai Score = 70 Count = 2 Subject=Thai Score = 30 Count = 2