ในการสันนิษฐานว่ามีการปรับปรุงความเร็วเนื่องจากรูปแบบของการประมวลผลหลายรูปแบบใด ๆ คุณต้องสันนิษฐานไว้ก่อนว่างานที่ใช้ CPU หลายงานกำลังดำเนินการพร้อมกันบนทรัพยากรคอมพิวเตอร์หลายตัว (โดยทั่วไปคือแกนประมวลผล) หรืออื่น ๆ ที่งานทั้งหมดไม่ได้ขึ้นอยู่กับการใช้งานพร้อมกันของ ทรัพยากรเดียวกันนั่นคืองานบางอย่างอาจขึ้นอยู่กับส่วนประกอบย่อยของระบบหนึ่ง (ที่จัดเก็บดิสก์พูด) ในขณะที่บางงานขึ้นอยู่กับอีกอย่างหนึ่ง (รับการสื่อสารจากอุปกรณ์ต่อพ่วง) และงานอื่น ๆ อาจต้องใช้คอร์โปรเซสเซอร์
สถานการณ์แรกมักเรียกว่าการเขียนโปรแกรมแบบ "ขนาน" สถานการณ์ที่สองมักเรียกว่าการเขียนโปรแกรม "พร้อมกัน" หรือ "อะซิงโครนัส" แม้ว่าบางครั้ง "พร้อมกัน" จะใช้เพื่ออ้างถึงกรณีที่อนุญาตให้ระบบปฏิบัติการทำงานหลาย ๆ อย่างแทรกระหว่างกันโดยไม่คำนึงว่าการดำเนินการดังกล่าวจะต้องใช้ วางตามลำดับหรือหากสามารถใช้ทรัพยากรหลายรายการเพื่อให้เกิดการดำเนินการแบบขนาน ในกรณีหลังนี้ "พร้อมกัน" โดยทั่วไปหมายถึงวิธีการเขียนการดำเนินการในโปรแกรมแทนที่จะมองจากมุมมองของการดำเนินงานพร้อมกันจริง
เป็นเรื่องง่ายมากที่จะพูดถึงเรื่องทั้งหมดนี้ด้วยสมมติฐานโดยปริยาย ตัวอย่างเช่นบางคนสามารถอ้างสิทธิ์ได้อย่างรวดเร็วเช่น "I / O แบบอะซิงโครนัสจะเร็วกว่า I / O แบบมัลติเธรด" การอ้างสิทธิ์นี้มีข้อสงสัยเนื่องจากสาเหตุหลายประการ ประการแรกอาจเป็นกรณีที่เฟรมเวิร์ก I / O แบบอะซิงโครนัสที่กำหนดบางตัวถูกนำไปใช้อย่างแม่นยำกับมัลติเธรดซึ่งในกรณีนี้เป็นแบบเดียวกันและไม่สมเหตุสมผลที่จะพูดว่าแนวคิดหนึ่ง "เร็วกว่า" อีกแนวคิดหนึ่ง .
ประการที่สองแม้ในกรณีที่มีการใช้งานเฟรมเวิร์กแบบอะซิงโครนัสแบบเธรดเดียว (เช่นลูปเหตุการณ์แบบเธรดเดียว) คุณยังคงต้องตั้งสมมติฐานเกี่ยวกับสิ่งที่ลูปนั้นกำลังทำอยู่ ตัวอย่างเช่นสิ่งโง่ ๆ อย่างหนึ่งที่คุณสามารถทำได้กับลูปเหตุการณ์แบบเธรดเดียวคือขอให้ทำงานที่เชื่อมโยงกับ CPU ที่แตกต่างกันอย่างสมบูรณ์แบบอะซิงโครนัส หากคุณทำสิ่งนี้บนเครื่องที่มีเพียงคอร์ตัวประมวลผลเดี่ยวในอุดมคติ (ละเว้นการปรับแต่งฮาร์ดแวร์ที่ทันสมัย) การทำงานนี้แบบ "อะซิงโครนัส" จะไม่แตกต่างไปจากการดำเนินการกับเธรดที่มีการจัดการสองเธรดที่แยกกันอย่างอิสระหรือเพียงกระบวนการเดียว - - ความแตกต่างอาจมาจากการสลับบริบทเธรดหรือการเพิ่มประสิทธิภาพกำหนดการของระบบปฏิบัติการ แต่ถ้าทั้งสองงานไปที่ CPU ก็จะคล้ายกันในทั้งสองกรณี
เป็นประโยชน์ในการจินตนาการถึงกรณีมุมที่ผิดปกติหรือโง่เขลาที่คุณอาจพบเจอ
"อะซิงโครนัส" ไม่จำเป็นต้องทำงานพร้อมกันตัวอย่างเช่นข้างต้นคุณ "อะซิงโครนัส" ดำเนินงานสองงานที่ผูกกับ CPU บนเครื่องที่มีแกนประมวลผลเดียว
การประมวลผลแบบมัลติเธรดไม่จำเป็นต้องพร้อมกัน: คุณวางเธรดสองเธรดบนเครื่องที่มีคอร์โปรเซสเซอร์เดียวหรือขอให้เธรดสองเธรดได้รับทรัพยากรที่หายากชนิดอื่น ๆ (สมมติว่าเป็นฐานข้อมูลเครือข่ายที่สามารถสร้างได้เพียงแห่งเดียว การเชื่อมต่อในแต่ละครั้ง) การดำเนินการของเธรดอาจถูกแทรกระหว่างกันอย่างไรก็ตามตัวกำหนดตารางเวลาระบบปฏิบัติการเห็นว่าเหมาะสม แต่รันไทม์ทั้งหมดไม่สามารถลดลงได้ (และจะเพิ่มขึ้นจากการสลับบริบทเธรด) บนคอร์เดียว (หรือโดยทั่วไปหากคุณวางเธรดมากกว่าที่มี คอร์เพื่อรันหรือมีเธรดที่ขอทรัพยากรมากกว่าที่ทรัพยากรสามารถรักษาได้) สิ่งเดียวกันนี้ใช้สำหรับการประมวลผลหลายอย่างเช่นกัน
ดังนั้นทั้ง I / O แบบอะซิงโครนัสหรือมัลติเธรดไม่จำเป็นต้องให้ประสิทธิภาพที่เพิ่มขึ้นในแง่ของเวลาทำงาน พวกเขายังสามารถทำให้สิ่งต่างๆช้าลง
อย่างไรก็ตามหากคุณกำหนดกรณีการใช้งานที่เฉพาะเจาะจงเช่นโปรแกรมเฉพาะที่ทั้งสองทำการเรียกเครือข่ายเพื่อดึงข้อมูลจากทรัพยากรที่เชื่อมต่อกับเครือข่ายเช่นฐานข้อมูลระยะไกลและยังทำการคำนวณที่เชื่อมโยงกับ CPU ในเครื่องคุณสามารถเริ่มให้เหตุผลเกี่ยวกับ ความแตกต่างด้านประสิทธิภาพระหว่างสองวิธีนี้มีข้อสันนิษฐานเฉพาะเกี่ยวกับฮาร์ดแวร์
คำถามที่ต้องถาม: ฉันต้องดำเนินการขั้นตอนการคำนวณกี่ขั้นตอนและมีระบบทรัพยากรที่เป็นอิสระจำนวนเท่าใดในการดำเนินการ มีชุดย่อยของขั้นตอนการคำนวณที่ต้องใช้ส่วนประกอบย่อยของระบบอิสระและจะได้รับประโยชน์จากการทำพร้อมกันหรือไม่ ฉันมีแกนประมวลผลกี่คอร์และค่าใช้จ่ายในการใช้โปรเซสเซอร์หรือเธรดหลายตัวเพื่อทำงานบนคอร์แยกกันคืออะไร
หากงานของคุณพึ่งพาระบบย่อยอิสระเป็นส่วนใหญ่ดังนั้นโซลูชันแบบอะซิงโครนัสอาจจะดี หากจำนวนเธรดที่จำเป็นในการจัดการมีขนาดใหญ่การเปลี่ยนบริบทจึงไม่สำคัญสำหรับระบบปฏิบัติการดังนั้นโซลูชันอะซิงโครนัสเธรดเดียวอาจดีกว่า
เมื่อใดก็ตามที่งานถูกผูกไว้โดยทรัพยากรเดียวกัน (เช่นความต้องการหลายอย่างในการเข้าถึงเครือข่ายเดียวกันหรือทรัพยากรในพื้นที่พร้อมกัน) การทำงานแบบมัลติเธรดอาจทำให้เกิดค่าใช้จ่ายที่ไม่น่าพอใจและในขณะที่แบบอะซิงโครไนซ์เธรดเดียวอาจทำให้มีค่าใช้จ่ายน้อยลงในทรัพยากรดังกล่าว - สถานการณ์ที่ จำกัด มันก็ไม่สามารถสร้างความเร็วได้เช่นกัน ในกรณีเช่นนี้ตัวเลือกเดียว (หากคุณต้องการเพิ่มความเร็ว) คือการสร้างสำเนาของทรัพยากรนั้นหลายชุด (เช่นแกนประมวลผลหลายตัวหากทรัพยากรที่หายากคือ CPU ฐานข้อมูลที่ดีกว่าที่รองรับการเชื่อมต่อพร้อมกันมากขึ้นหากทรัพยากรหายาก เป็นฐานข้อมูลที่ จำกัด การเชื่อมต่อ ฯลฯ )
อีกวิธีหนึ่งคือการอนุญาตให้ระบบปฏิบัติการแทรกแซงการใช้ทรัพยากรเดียวสำหรับงานสองงานต้องไม่เร็วไปกว่าการปล่อยให้งานหนึ่งใช้ทรัพยากรในขณะที่อีกงานหนึ่งรอจากนั้นปล่อยให้งานที่สองเสร็จสิ้นตามลำดับ นอกจากนี้ค่าใช้จ่ายของตัวกำหนดตารางเวลาในการ interleaving หมายถึงในสถานการณ์จริงใด ๆ จะทำให้เกิดการชะลอตัว ไม่สำคัญว่าการใช้งานแบบสอดแทรกจะเกิดขึ้นกับ CPU ทรัพยากรเครือข่ายทรัพยากรหน่วยความจำอุปกรณ์ต่อพ่วงหรือทรัพยากรระบบอื่น ๆ