มันขึ้นอยู่กับสิ่งที่คุณกำลังพัฒนา คำตอบขึ้นอยู่กับสิ่งที่คุณพัฒนาอาจมีตั้งแต่ "ไม่มีนัยสำคัญ" ถึง "สำคัญมากและเราคาดหวังให้ทุกคนในทีมมีความเข้าใจที่ดีและใช้งานการใช้งานแบบคู่ขนาน"
สำหรับกรณีส่วนใหญ่ความเข้าใจที่มั่นคงและการใช้ล็อกเธรดและงานและกลุ่มงานจะเป็นการเริ่มต้นที่ดีเมื่อต้องการความขนาน (แตกต่างกันไปตาม lang / lib)
นอกจากนั้นความแตกต่างในการออกแบบที่คุณต้องทำ - สำหรับการประมวลผลหลายอย่างที่ไม่จำเป็นคุณต้องเรียนรู้รูปแบบการเขียนโปรแกรมใหม่ ๆ หรือกลยุทธ์การขนาน ในกรณีนั้นเวลาที่จะเรียนรู้ที่จะล้มเหลวเวลาพอที่จะมีความเข้าใจที่มั่นคงและการปรับปรุงโปรแกรมที่มีอยู่สามารถใช้เวลาเป็นทีมปี (หรือมากกว่า) เมื่อคุณมาถึงจุดนั้นแล้วคุณจะ (หวังว่า!) จะไม่เข้าใจหรือเข้าใกล้ปัญหา / การใช้งานอย่างที่คุณทำในวันนี้ (หากคุณยังไม่ได้ทำการเปลี่ยนแปลงนั้น)
อุปสรรคอีกประการหนึ่งคือคุณเพิ่มประสิทธิภาพโปรแกรมอย่างมีประสิทธิภาพเพื่อการดำเนินการบางอย่าง หากคุณไม่มีเวลามากพอที่จะปรับโปรแกรมให้เหมาะสมคุณจะไม่ได้รับประโยชน์จากโปรแกรมเท่าที่ควร การขนานที่มีระดับสูง (หรือชัดเจน) สามารถปรับปรุงความเร็วในการรับรู้โปรแกรมของคุณด้วยความพยายามเพียงเล็กน้อยและนั่นคือเท่าที่หลาย ๆ ทีมจะดำเนินการในวันนี้: "เราได้ขนานส่วนที่เห็นได้ชัดของแอป" - ประโยชน์ของการเก็บผลไม้แขวนลอยต่ำและการใช้การเปรียบเทียบแบบง่ายจะเป็นไปตามสัดส่วนของจำนวนแกนหรือไม่ บ่อยครั้งเมื่อมีสองถึงสี่แกนตรรกะ แต่ไม่บ่อยไปกว่านั้น ในหลาย ๆ กรณีนั่นคือผลตอบแทนที่ยอมรับได้เนื่องจากการลงทุนครั้งนี้ แบบจำลองคู่ขนานนี้เป็นการแนะนำของคนจำนวนมากเกี่ยวกับการใช้ประโยชน์จากความเท่าเทียมกัน
สิ่งที่คุณเรียนรู้โดยใช้แบบจำลองคู่ขนานขนาดเล็กนี้จะไม่เหมาะในสถานการณ์แบบคู่ขนานที่ซับซ้อนทั้งหมด การใช้การออกแบบแบบคู่ขนานที่ซับซ้อนอย่างมีประสิทธิภาพนั้นจำเป็นต้องมีความเข้าใจและวิธีการที่แตกต่างกันมาก โมเดลที่เรียบง่ายเหล่านี้มักจะถูกแยกออกหรือมีปฏิสัมพันธ์เล็กน้อยกับส่วนประกอบอื่น ๆ ของระบบ เช่นกันการใช้งานแบบจำลองเล็ก ๆ น้อย ๆ เหล่านี้ไม่ได้ปรับขนาดให้เข้ากับระบบคู่ขนานที่ซับซ้อนได้อย่างมีประสิทธิภาพ - การออกแบบแบบขนานที่ซับซ้อนไม่ดีอาจใช้เวลานานในการดำเนินการเป็นแบบจำลองที่เรียบง่าย ป่วย: มันประมวลผลเร็วกว่าสองเท่าของเธรดรุ่นเดียวในขณะที่ใช้ตรรกะ 8 คอร์ระหว่างการดำเนินการ ตัวอย่าง comon ส่วนใหญ่ใช้ / สร้างเธรดมากเกินไปและมีสัญญาณรบกวนในระดับสูง โดยทั่วไปจะเรียกว่าการชะลอตัวแบบขนาน มันค่อนข้างง่ายที่จะพบถ้าคุณเข้าถึงปัญหาแบบขนานทั้งหมดเป็นปัญหาง่าย ๆ
ดังนั้นสมมติว่าคุณจริงๆควรใช้แบบมัลติเธรดที่มีประสิทธิภาพในโปรแกรมของคุณ (ชนกลุ่มน้อยในสภาพภูมิอากาศในปัจจุบัน): คุณจะต้องจ้างรูปแบบที่เรียบง่ายอย่างมีประสิทธิภาพในการเรียนรู้รูปแบบที่ซับซ้อนและ relearn แล้วว่าคุณเข้าใกล้การไหลของโปรแกรมและการมีปฏิสัมพันธ์ รูปแบบที่ซับซ้อนคือที่ที่โปรแกรมของคุณควรจะอยู่ในท้ายที่สุดเพราะนั่นคือสิ่งที่ฮาร์ดแวร์เป็นอยู่ในปัจจุบันและการปรับปรุงที่โดดเด่นที่สุดจะทำ
การดำเนินการของโมเดลที่เรียบง่ายสามารถมองเห็นได้เช่นทางแยกและโมเดลที่ซับซ้อนนั้นทำงานได้อย่างซับซ้อน, เอ่อ, ระบบนิเวศ ฉันคิดว่าการทำความเข้าใจกับโมเดลที่เรียบง่ายรวมถึงการล็อกทั่วไปและการทำเกลียวควรจะเป็นหรือจะได้รับการคาดหวังจากนักพัฒนาระดับกลางเมื่อโดเมน (ที่คุณพัฒนา) ใช้งานอยู่ การทำความเข้าใจกับโมเดลที่ซับซ้อนยังคงเป็นสิ่งที่ผิดปกติเล็กน้อยในทุกวันนี้ (ในโดเมนส่วนใหญ่) แต่ฉันคิดว่าความต้องการจะเพิ่มขึ้นอย่างรวดเร็ว ในฐานะนักพัฒนาโปรแกรมของเราจำนวนมากควรสนับสนุนโมเดลเหล่านี้และการใช้งานส่วนใหญ่ค่อนข้างล้าหลังในการทำความเข้าใจและการใช้แนวคิดเหล่านี้ เนื่องจากจำนวนตัวประมวลผลเชิงตรรกะเป็นหนึ่งในส่วนที่สำคัญที่สุดของการปรับปรุงฮาร์ดแวร์ความต้องการสำหรับผู้ที่เข้าใจและสามารถใช้ระบบที่ซับซ้อนจะเพิ่มขึ้นอย่างแน่นอน
ในที่สุดมีผู้คนจำนวนมากที่คิดว่าวิธีแก้ปัญหาเป็นเพียง "เพิ่มการทำงานคู่ขนาน" บ่อยครั้งมันจะดีกว่าที่จะทำให้การใช้งานที่มีอยู่เร็วขึ้น มันง่ายกว่าและตรงไปตรงมามากขึ้นในหลาย ๆ กรณี โปรแกรมจำนวนมากในป่าไม่เคยได้รับการปรับให้เหมาะสม บางคนเพิ่งรู้สึกว่ารุ่นที่ไม่ได้เพิ่มประสิทธิภาพจะถูกบดบังโดยฮาร์ดแวร์ในไม่ช้า การปรับปรุงการออกแบบหรือ algos ของโปรแกรมที่มีอยู่ก็เป็นทักษะที่สำคัญเช่นกันหากประสิทธิภาพมีความสำคัญ - การทิ้งแกนให้มากขึ้นในปัญหาไม่จำเป็นต้องเป็นทางออกที่ดีที่สุดหรือง่ายที่สุด
เมื่อกำหนดเป้าหมายพีซีที่ทันสมัยพวกเราส่วนใหญ่ที่ต้องการใช้ระบบคู่ขนานที่ดีจะไม่จำเป็นต้องไปไกลกว่ามัลติเธรดล็อคห้องสมุดคู่ขนานมูลค่าการอ่านหนังสือและโปรแกรมการเขียนและทดสอบประสบการณ์มากมาย วิธีการเขียนโปรแกรม)