สิ่งที่ถูกกล่าวถึงเป็นหลักคือความแตกต่างระหว่างวิธีการประมวลผลแบบกดและแบบดึง ในระบบพุชเช่นไลบรารี่ไพพ์นี้คุณสร้างสายการประมวลผลและแต่ละขั้นตอนการประมวลผลจะดันข้อมูลลงในถัดไปโดยตรง ใน pull-system like range คุณสร้างการแสดงข้อมูลซึ่งคุณสามารถเข้าถึงและแก้ไขได้ตามต้องการ การประมวลผลไม่ได้เกิดขึ้นเอง มันเกิดขึ้นเฉพาะเมื่อมีคนพยายามที่จะใช้ช่วง
unzip
และfork
การดำเนินงานมีทั้งการดำเนินการอย่างใดอย่างหนึ่งต่อหลายคนที่พวกเขาใช้การป้อนข้อมูลเดียวและแผนที่ไปยังการดำเนินงานการประมวลผลจำนวนมาก
ในฐานะที่เป็นระบบพุชไลบรารีของท่อสามารถจัดการการทำงานแบบหนึ่งต่อหลายคนได้เนื่องจากโครงสร้างของ API การดำเนินการถูกแสดงโดยการเรียกใช้ฟังก์ชัน อินพุตถูกบอกเป็นนัยโดยจุดใช้งาน (ใช้>>=
หรือส่งต่อไปยังตัวประมวลผล) พารามิเตอร์ของฟังก์ชันกำหนดเอาท์พุท (ละเว้นพารามิเตอร์ที่มีความหมายสำหรับตัวประมวลผลเอง) และเนื่องจากฟังก์ชั่น C ++ สามารถมีพารามิเตอร์จำนวนเท่าใดก็ได้ดังนั้นการทำแผนที่แบบหนึ่งต่อหลายคนจึงไม่เป็นไปตามธรรมชาติ คุณเพียงจัดหาโปรเซสเซอร์ที่เหมาะสมสำหรับเอาต์พุตต่างๆ
ในฐานะที่เป็นระบบดึงช่วงจะขึ้นอยู่กับค่าตอบแทน C ++ ไม่มีกลไกภาษาในการคืนค่าหลายค่าดังนั้นสิ่งที่ดีที่สุดที่เราทำได้คือคืนค่า "ค่า" ที่แสดงถึงค่าหลายค่า
แต่อะแดปเตอร์ช่วงผูกมัดอยู่ในท้ายที่สุดบนพื้นฐานปัจจัยการผลิตเป็นช่วง และ "ค่า" ที่แสดงถึงหลายค่า " นั้นไม่ใช่ช่วง มันอาจมีช่วง แต่ก็ไม่ได้ทำให้เป็นช่วง
ดังนั้นตอนนี้คุณต้องใช้ชนิด "ไม่ใช่ช่วง" และทำให้อแด็ปเตอร์ช่วงทั้งหมดของคุณใช้งานได้ การใช้อะแดปเตอร์ช่วงจะต้องออกอากาศการดำเนินการนั้นข้ามประเภทการสร้างการดำเนินงานหลายต่อหลายคน การทำเช่นนั้นไม่ใช่เรื่องง่าย
แต่ที่สำคัญกว่า ... ที่อาจจะไม่ใช่สิ่งที่คุณต้องการ หากคุณfork
เป็นช่วงหนึ่งคุณอาจต้องการทำการประมวลผลที่แตกต่างกันในช่วงการจำลองแบบ และนั่นเป็นการปิดโอกาสในการใช้การ|
ดำเนินการทั้งหมด คุณจะต้องสร้างวิธีในการปรับใช้อะแดปเตอร์กับส่วนต่าง ๆ ของสิ่งเหล่านี้ และวิธีการเหล่านั้นมีลักษณะคล้ายกับโปรเซสเซอร์แบบกด
ในตอนท้ายของวันระบบแบบดึงจะมีเพียงหนึ่งเอาต์พุตในแต่ละระดับ นั่นเป็นเพียงส่วนหนึ่งของแนวคิดหลักของการเช่น API: การแต่ละขั้นตอนการประมวลผลสร้างช่วง สิ่งนี้มีข้อดี (การประมวลผลที่ขี้เกียจ) แต่การแทนการดำเนินงานแบบหนึ่งต่อหลายเป็นหนึ่งในพื้นที่ที่อ่อนแอ
ช่วงสามารถมีunzip
ฟังก์ชั่นได้อย่างแน่นอน( fork
เป็นเพียงการคัดลอกช่วง) แต่มันจะไม่ใช่|
อะแดปเตอร์สไตล์ มันจะเป็นฟังก์ชั่นที่รับช่วงเหนือบางชนิดที่ย่อยสลายได้และส่งกลับค่า tuple ของช่วง หากคุณต้องการทำการประมวลผลเพิ่มเติมกับพวกเขาคุณจะต้องเก็บค่า tuple ในค่าเข้าถึงแต่ละองค์ประกอบและใช้ตามที่เห็นสมควร