Stream API ได้รับการออกแบบมาเพื่อให้ง่ายต่อการเขียนการคำนวณด้วยวิธีที่แยกออกจากวิธีที่พวกเขาจะถูกดำเนินการทำให้การสลับระหว่างลำดับและขนานง่าย
อย่างไรก็ตามเนื่องจากง่ายไม่ได้หมายความว่ามันเป็นความคิดที่ดีเสมอและในความเป็นจริงมันเป็นความคิดที่ดีที่จะทิ้ง.parallel()
ทุกที่ไว้เพียงเพราะคุณทำได้
ก่อนอื่นให้สังเกตว่าการขนานกันนั้นไม่ได้มีประโยชน์อะไรนอกจากความเป็นไปได้ของการดำเนินการที่รวดเร็วกว่าเมื่อมีแกนประมวลผลเพิ่มเติม การดำเนินการแบบขนานจะเกี่ยวข้องกับการทำงานมากกว่าลำดับต่อเนื่องเสมอเนื่องจากนอกเหนือจากการแก้ปัญหาแล้วยังต้องทำการจัดส่งและประสานงานของงานย่อยอีกด้วย ความหวังคือคุณจะได้รับคำตอบเร็วขึ้นโดยการแบ่งงานระหว่างโปรเซสเซอร์หลายตัว ไม่ว่าจะเกิดขึ้นจริงขึ้นอยู่กับหลายสิ่งรวมถึงขนาดของชุดข้อมูลของคุณการคำนวณที่คุณทำกับแต่ละองค์ประกอบธรรมชาติของการคำนวณ (โดยเฉพาะการประมวลผลขององค์ประกอบหนึ่งโต้ตอบกับการประมวลผลของผู้อื่นหรือไม่) จำนวนตัวประมวลผลที่มีอยู่และจำนวนของงานอื่นที่แข่งขันกันสำหรับตัวประมวลผลเหล่านั้น
นอกจากนี้โปรดทราบว่าการขนานกันนั้นมักจะนำมาซึ่งลัทธิเอนโดเทมินิสม์ในการคำนวณที่มักจะถูกซ่อนไว้โดยการใช้งานแบบต่อเนื่อง บางครั้งสิ่งนี้ไม่สำคัญหรือสามารถบรรเทาได้ด้วยการ จำกัด การดำเนินการที่เกี่ยวข้อง (เช่นตัวดำเนินการลดต้องไร้สัญชาติและเชื่อมโยงกัน)
ในความเป็นจริงบางครั้งการขนานจะทำให้การคำนวณของคุณเร็วขึ้นบางครั้งก็ไม่ได้และบางครั้งมันก็จะทำให้ช้าลง ที่ดีที่สุดคือการพัฒนาครั้งแรกโดยใช้การดำเนินการตามลำดับแล้วใช้ขนานที่
(A) คุณรู้ว่ามีประโยชน์กับการเพิ่มประสิทธิภาพและ
(B) ว่าจะให้ประสิทธิภาพที่เพิ่มขึ้นจริง
(A) เป็นปัญหาทางธุรกิจไม่ใช่ปัญหาด้านเทคนิค หากคุณเป็นผู้เชี่ยวชาญด้านประสิทธิภาพคุณมักจะสามารถดูรหัสและตรวจสอบ (B) แต่เส้นทางสมาร์ทคือการวัด (และอย่ากังวลจนกว่าคุณจะมั่นใจได้ว่า (A) ถ้ารหัสนั้นเร็วพอแนะนำให้ใช้รอบสมองของคุณที่อื่นดีกว่า)
แบบจำลองประสิทธิภาพที่ง่ายที่สุดสำหรับการขนานคือโมเดล "NQ" โดยที่ N คือจำนวนองค์ประกอบและ Q คือการคำนวณต่อองค์ประกอบ โดยทั่วไปคุณต้องมีผลิตภัณฑ์ NQ เกินขีด จำกัด บางอย่างก่อนที่คุณจะเริ่มได้รับประโยชน์ด้านประสิทธิภาพ สำหรับปัญหาต่ำ Q เช่น "เพิ่มตัวเลขตั้งแต่ 1 ถึง N" คุณจะเห็นจุดคุ้มทุนระหว่าง N = 1,000 ถึง N = 10,000 ด้วยปัญหาถาม - ตอบสูงกว่าคุณจะเห็น breakevens ที่ระดับต่ำกว่า
แต่ความจริงแล้วค่อนข้างซับซ้อน ดังนั้นจนกว่าคุณจะประสบความสำเร็จในขั้นแรกให้ระบุก่อนว่าการประมวลผลแบบต่อเนื่องจะทำให้คุณต้องเสียค่าใช้จ่ายจริงหรือไม่