Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

ว่าด้วยเรื่อง Parallel และ Concurrent

$
0
0

ในกลุ่ม Golang Thailand มีการพูดคุยเรื่อง Parallel มันต่างจาก Concurrent อย่างไร ? มันเป็นสิ่งที่สับสนและมึนงงเยอะมาก ๆ ผมก็งง ๆ อยู่เช่นกัน โดยทั้งสองอย่างนั้นมันมีอยู่ในทุก ๆ ส่วนของระบบงาน คือ
  • Hardware
  • Operating System (OS)
  • Programming ในภาษาต่าง ๆ
ดังนั้นลองมาหาคำตอบกันหน่อยสิ ปล. เขียนไปแบบงง ๆ

Concurrent เป็นการจัดการหลาย ๆ งานในเวลาเดียวกัน

งานคือสิ่งที่เราต้องการให้ทำจนเสร็จสิ้น ยกตัวอย่างเช่น เราไม่สามารถใช้มือเดียวยกแก้วเบียร์พร้อมกับเขียน blog ได้ นั่นหมายความว่า เราสามารถจัดการงานได้เพียงงานเดียว เช่น ยกแก้วเบียร์เพื่อกิน เราทำการกินเบียร์ไปสักคำ จากนั้นวางแก้วลง แล้วมาเขียน blog ไปสักสองถึงสามประโยค จากนั้นกลับมายกแก้วเบียร์ จากนั้นวางแก้วแล้วไปถือโทรศัพท์ จากนั้นกลับมายกแก้วเบียร์ต่อ ... สังเกตุไหมว่า แต่ละงานจะเข้ามาพร้อม ๆ กัน แต่เราใช้มือเพียงข้างเดียว ดังนั้นจึงต้องเลือกว่าจะทำงานอะไรก่อนหลัง จากนั้นทำการสลับงานที่ทำไปมา ในขณะที่แต่ละงานยังไม่เสร็จเลย นั่นคือการจัดการคิวงานนั่นเอง มันคือเรื่อง Context Switching คุ้น ๆ กันไหมนะ มันคือ multi-tasking หรือเปล่านะ ?

Parallel เป็นการ execute หรือทำงานหลาย ๆ งานพร้อมกันในเวลาเดียวกัน

แต่ก่อนที่จะทำการทำงานพร้อม ๆ กันได้นั้น ต้องทำการจัดการงานต่าง ๆ หรือทำการแบ่งงานเป็นงานย่อย ๆ จากตัวอย่างคือ การยกแก้วเบียร์ การเขียน blog การถือโทรศัพท์ จากนั้นลงมือทำงานต่าง ๆ พร้อม ๆ กันเลย นั่นแสดงว่าเราต้องมีมากกว่า 1 มือมาทำงาน แต่ละงานถูกทำงานงานแยกกันเป็นอิสระ แน่นอนว่า ถ้ามองในมุมของนักพัฒนาแล้ว แต่ละงานต้องแยกกันอย่างชัดเจน เป็นอิสระแก่กัน

สังเกตุไหมว่าทั้งสองเรื่อง คือ เทคนิคการแบ่งงานเป็นงานย่อย ๆ

เพื่อให้สามารถทำงานแบบขนานหรือ parallel ได้ เพื่อเพิ่มประสิทธิภาพการทำงานของระบบ รวมทั้งช่วยจัดการความเสี่ยงต่าง ๆ ที่อาจจะเกิดขึ้นเมื่อทำงานพร้อม ๆ กัน บางงานอาจจะทำงานแบบ Concurrent แต่ไม่ Parallel บางงานอาจจะทำงานแบบ Parallel แต่ไม่ Concurrent อ่านแล้วงงดีไหม ?

โดยสรุปแล้ว

Concurrent เป็นการจัดการหลาย ๆ งานในเวลาเดียวกัน นั่นคือเรื่องของโครงสร้างเพื่อจัดการปัญหา (Structure) มักจะพูดถึง Modularity, Responsive และ Maintainability สิ่งที่ได้ตามมาคือ ประสิทธิภาพของการทำงาน โดยจะให้ความสำคัญกับเรื่องของ
  • จะเริ่มทำงานเมื่อใด ?
  • ข้อมูลมีการแลกเปลี่ยนอย่างไร ?
  • จัดการการเข้าถึง shared resource กันอย่างไร ?
Parallel เป็นการทำงานหลาย ๆ งานในเวลาเดียวกัน นั่นคือเรื่องของทำงาน หรือ ประมวลผล (Execution) เป้าหมายหลักเพิ่มประสิทธิภาพของการทำงาน Parallel hardware ประกอบไปด้วย Multi-core processor, GPU และ computer cluster เป็นต้น Parallel programming จะเน้นในเรื่อง
  • จะแบ่งงานใหญ่ ๆ ออกเป็นงานย่อย ๆ ได้อย่างไร ?
  • จะใช้งาน parallel hardware อย่างไร ให้เหมาะสมที่สุด ?
เพื่อทำให้การประมวลผลรวดเร็วสุด ๆ การประมวลผลข้อมูลขนาดใหญ่และซับซ้อน เช่น Data analysis, 3D rendering เป็นต้น
ทั้งสองไม่เหมือนกันนะ แต่ดันเกี่ยวข้องกัน ไปกินเบียร์เย็น ๆ พร้อมกันสองแก้วดีกว่า !!
Reference Websites https://www.coursera.org/learn/parprog1/ https://takuti.me/note/parallel-vs-concurrent/ http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html http://www.dietergalea.com/parallelism-concurrency/ https://talks.golang.org/2012/waza.slide#1 https://www.braveclojure.com/concurrency/

Viewing all articles
Browse latest Browse all 1997

Trending Articles