ฉันมาที่นี่ค่อนข้างสะดวกสบายกับแนวคิดทั้งสอง แต่มีบางอย่างที่ไม่ชัดเจนสำหรับฉันเกี่ยวกับพวกเขา
หลังจากอ่านคำตอบบางข้อแล้วฉันคิดว่าฉันมีคำอุปมาที่ถูกต้องและเป็นประโยชน์ในการอธิบายความแตกต่าง
ถ้าคุณคิดว่ารหัสของคุณแยกจากกัน แต่สั่งให้เล่นไพ่ (หยุดฉันถ้าฉันอธิบายว่าการ์ดเจาะโรงเรียนเก่าทำงานอย่างไร) สำหรับแต่ละขั้นตอนที่เขียนแยกกันคุณจะมีการ์ดที่ไม่เหมือนใคร คัดลอกและวาง!) และความแตกต่างระหว่างสิ่งที่เกิดขึ้นตามปกติเมื่อเรียกใช้รหัสปกติและแบบอะซิงโครนัสขึ้นอยู่กับว่าคุณสนใจหรือไม่
เมื่อคุณเรียกใช้รหัสคุณส่งชุดปฏิบัติการเดี่ยว (ให้คอมไพเลอร์หรือล่ามของคุณทำลายรหัสระดับ "สูงกว่า" ของคุณลงใน) เพื่อส่งไปยังโปรเซสเซอร์ ด้วยโปรเซสเซอร์เดียวสามารถประมวลผลโค้ดได้เพียงบรรทัดเดียวในแต่ละครั้ง ดังนั้นเพื่อให้บรรลุภาพลวงตาของการรันหลายกระบวนการในเวลาเดียวกันระบบปฏิบัติการใช้เทคนิคที่จะส่งโปรเซสเซอร์เพียงไม่กี่บรรทัดจากกระบวนการที่กำหนดในแต่ละครั้งสลับระหว่างกระบวนการทั้งหมดตามวิธีที่เห็น พอดี ผลที่ได้คือกระบวนการหลายกระบวนการที่แสดงความคืบหน้าต่อผู้ใช้ในสิ่งที่ดูเหมือนจะเป็นเวลาเดียวกัน
สำหรับคำอุปมาของเราความสัมพันธ์คือระบบปฏิบัติการจะสับไพ่ก่อนที่จะส่งไปยังโปรเซสเซอร์ หากสแต็คการ์ดของคุณไม่ได้ขึ้นอยู่กับสแต็คอื่นคุณไม่สังเกตเห็นว่าสแต็คของคุณหยุดการเลือกจากในขณะที่สแต็คอื่นเปิดใช้งาน ดังนั้นถ้าคุณไม่สนใจมันไม่สำคัญ
อย่างไรก็ตามหากคุณสนใจ (เช่นมีหลายกระบวนการ - หรือสแต็คของการ์ด - ซึ่งขึ้นอยู่กับแต่ละอื่น ๆ ) จากนั้นการสับของระบบปฏิบัติการจะทำให้ผลลัพธ์ของคุณแย่ลง
การเขียนโค้ดอะซิงโครนัสต้องการการจัดการการพึ่งพาระหว่างลำดับของการดำเนินการโดยไม่คำนึงถึงสิ่งที่การสั่งซื้อนั้นสิ้นสุดลง นี่คือเหตุผลที่โครงสร้างเช่น "โทรกลับ" ถูกนำมาใช้ พวกเขาพูดกับหน่วยประมวลผลกลาง "สิ่งต่อไปที่ต้องทำคือบอกอีกกองหนึ่งว่าเราทำอะไร" ด้วยการใช้เครื่องมือดังกล่าวคุณสามารถมั่นใจได้ว่าสแต็กอื่นจะได้รับการแจ้งเตือนก่อนที่จะอนุญาตให้ระบบปฏิบัติการเรียกใช้คำสั่งเพิ่มเติมได้อีก ("ถ้าเรียกว่า _back == false: send (no_operation)" - ไม่แน่ใจว่านี่เป็นวิธีการนำไปใช้จริง แต่มีเหตุผลฉันคิดว่ามันสอดคล้องกัน)
สำหรับกระบวนการแบบขนานความแตกต่างคือคุณมีสองกองที่ไม่สนใจซึ่งกันและกันและสองคนทำงานในการประมวลผล ในตอนท้ายของวันคุณอาจต้องรวมผลลัพธ์จากทั้งสองสแต็คซึ่งจะเป็นเรื่องของความบังเอิญ แต่สำหรับการดำเนินการคุณไม่ต้องสนใจอีก
ไม่แน่ใจว่าสิ่งนี้ช่วยได้หรือไม่ แต่ฉันมักพบว่าคำอธิบายหลาย ๆ นอกจากนี้โปรดทราบว่าการประมวลผลแบบอะซิงโครนัสจะไม่ถูก จำกัด กับคอมพิวเตอร์แต่ละเครื่องและตัวประมวลผล โดยทั่วไปแล้วจะพูดถึงเวลาหรือลำดับเหตุการณ์ที่เกิดขึ้น ดังนั้นถ้าคุณส่งสแต็ก A ที่ขึ้นต่อกันไปที่โหนดเครือข่าย X และสแต็กสแต็ก B ถึง Y ของมันรหัสอะซิงโครนัสที่ถูกต้องควรจะสามารถอธิบายสถานการณ์ราวกับว่ามันทำงานอยู่ในเครื่องแล็ปท็อปของคุณ