การเขียนโปรแกรมแบบกระจายคืออะไร?

การเขียนโปรแกรมแบบกระจายเป็นรูปแบบหนึ่งของการเขียนโปรแกรมแบบขนานหรือการคำนวณแบบขนาน การเขียนโปรแกรมแบบขนานนั้นเกี่ยวข้องกับคอมพิวเตอร์และหน่วยการคำนวณภายในคอมพิวเตอร์ที่ทำงานพร้อมกันกับปัญหาเฉพาะเช่นการพยากรณ์สภาพอากาศในวันพรุ่งนี้ หน่วยคำนวณสามารถอยู่ใกล้กันมากและประสานงานหรืออยู่ห่างกันได้ เมื่อหน่วยการคำนวณแตกต่างกันจะเรียกว่าการเขียนโปรแกรมแบบกระจาย ในสถานการณ์เช่นนี้บ่อยครั้งที่หน่วยการคำนวณแตกต่างกันและระบบปฏิบัติการและการตั้งค่าเครือข่ายก็แตกต่างกันเช่นกันทำให้การเขียนโปรแกรมของกิจกรรมการคำนวณมีความท้าทายเป็นพิเศษ

เมื่อแก้ปัญหาในลักษณะกระจายโปรแกรมจะต้องแยกออกเพื่อให้ส่วนของโปรแกรมสามารถทำงานในหน่วยการคำนวณที่แตกต่างกัน ส่วนเหล่านี้มักเรียกว่า "กระบวนการ" กระบวนการทำงานพร้อมกัน แต่จำเป็นต้องสื่อสารอินพุตและผลลัพธ์ให้กัน หากกระบวนการทำงานบนฮาร์ดแวร์ที่แตกต่างกันเช่นส่วนหนึ่งที่ทำงานบน Intel และส่วนอื่นทำงานบน SUN ดังนั้นโปรแกรมจะต้องรวบรวมและปรับให้เหมาะสมต่างกัน

วิธีหนึ่งในการแก้ปัญหาที่ยากพอเพียงคือการแยกส่วนอินพุตและให้หน่วยการคำนวณที่แตกต่างกันทำงานในส่วนต่าง ๆ โดยใช้อัลกอริทึมเดียวกันชุดของกฎหรือขั้นตอนสำหรับการแก้ปัญหา ตัวอย่างเช่นหากต้องการถอดรหัสจีโนม 10,000 คู่สามารถกำหนด 1,000 คู่แรกให้กับหน่วยคำนวณแรกได้ 1,000 คู่ที่สองที่กำหนดให้กับหน่วยคำนวณที่สองเป็นต้นโดยใช้อัลกอริทึมเดียวกันทั้งหมด ด้วยการเขียนโปรแกรมแบบกระจายข้อดีอย่างหนึ่งคือหน่วยการคำนวณที่แตกต่างกันสามารถเรียกใช้อัลกอริทึมที่แตกต่างกันเพื่อแก้ปัญหาเดียวกันจึงนำไปสู่ทางออกที่ดีกว่า นี่คล้ายกับการไขปริศนาตัวต่อที่บางคนประกอบกันเป็นเส้นขอบ

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

ในการเขียนโปรแกรมแบบกระจายกระบวนการหนึ่งอาจเป็นกระบวนการควบคุมโดยพื้นฐานแล้วการทำงานให้สำเร็จโดยกระบวนการอื่นหรือกระบวนการทั้งหมดสามารถทำงานในลักษณะเพียร์ทูเพียร์โดยไม่มีกระบวนการเป็น "ต้นแบบ" ตัวอย่างของปัญหาที่เกิดขึ้นกับการเขียนโปรแกรมแบบกระจายรวมถึงการวิเคราะห์ข้อมูลทางธรณีวิทยาสำหรับแหล่งข้อมูลเช่นปิโตรเลียมการสร้างแบบจำลองของโปรตีนและโมเลกุลทางชีวภาพการถอดรหัสข้อความที่เข้ารหัสและการจำลองสถานการณ์ทางทหาร โครงการ SETI เพื่อค้นหาสิ่งมีชีวิตนอกโลกที่ชาญฉลาดจากข้อความวิทยุที่โลกได้รับอาจเป็นหนึ่งในตัวอย่างที่รู้จักกันดีที่สุด