Treading vs Multiprocessing vs Asynchronous Programming

Feb 22 2023
เธรด การประมวลผลหลายตัว และการเขียนโปรแกรมแบบอะซิงโครนัสเป็นวิธีการทั้งหมดสำหรับการสร้างแบบขนานในคอมพิวเตอร์ แต่เป็นวิธีการจัดการกับงานหลายอย่างในเวลาเดียวกัน ในบล็อกโพสต์นี้ เราจะดูที่ตรรกะเบื้องหลัง
เธรด การเขียนโปรแกรมอะซิงโครนัสมัลติโพรเซสซิง

เธรด การประมวลผลหลายตัว และการเขียนโปรแกรมแบบอะซิงโครนัสเป็นวิธีการทั้งหมดสำหรับการสร้างแบบขนานในคอมพิวเตอร์ แต่เป็นวิธีการจัดการกับงานหลายอย่างในเวลาเดียวกัน ในบล็อกโพสต์นี้ เราจะดูที่ตรรกะเบื้องหลัง นอกจากนี้เราจะดูความแตกต่าง

หัวข้อ

การทำเกลียวคือการประมวลผลของเธรดจำนวนมากภายในกระบวนการเดียว
แต่ละเธรดใช้หน่วยความจำและทรัพยากรร่วมกัน แต่สามารถทำงานหลายอย่างได้ในเวลาเดียวกัน เธรดมีน้ำหนักเบาและสามารถสร้างและลบได้อย่าง รวดเร็ว
แต่อาจทำให้เกิดสภาพการแข่งขันการหยุดชะงักและปัญหาการเข้าถึงทรัพยากรที่ใช้ร่วมกัน

สภาวะการแข่งขันเกิดขึ้นเมื่อใด ?

สภาวะการแย่งชิงคือสถานการณ์ที่สามารถเกิดขึ้นได้ในการเขียนโปรแกรมพร้อมกันหรือแบบขนาน เมื่อหลายเธรดพยายามเข้าถึงตัวแปรที่ใช้ร่วมกันในเวลาเดียวกัน

เธรดแรกอ่านตัวแปร และเธรดที่สองอ่านค่าของตัวแปร จากนั้นเธรดที่หนึ่งและสองจะดำเนินการกับค่า โดยแข่งกันเพื่อกำหนดว่าเธรดใดสามารถเขียนค่าไปยังตัวแปรที่ใช้ร่วมกันก่อน เนื่องจากเธรดกำลังเขียนทับค่าที่เธรดก่อนหน้านี้เขียน ค่าของเธรดที่เผยแพร่ค่าสุดท้ายจะถูกเก็บไว้

เมื่อ Deadlocks เกิดขึ้น ?

การล็อกตายเกิดขึ้นเมื่อสองเธรดล็อกตัวแปรที่แตกต่างกันในเวลาเดียวกัน จากนั้นพยายามล็อกตัวแปรที่เธรดอื่นล็อกไว้แล้ว ส่งผลให้แต่ละเธรดพบข้อผิดพลาดและยุติการดำเนินการ

การประมวลผลหลายตัว

การประมวลผลหลายตัวกำลังทำงานหลายกระบวนการสำหรับหลาย ๆ งานโดยมีพื้นที่หน่วยความจำและทรัพยากร ของตัวเอง กระบวนการสามารถสื่อสารระหว่างกันผ่านการสื่อสารระหว่างกระบวนการ (IPC) แต่ไม่สามารถเข้าถึงหน่วยความจำของกันและกันได้โดยตรง การประมวลผลหลายตัวมีประสิทธิภาพมากกว่าการทำเธรด แต่มีค่าใช้จ่ายสูงกว่าเนื่องจากต้องมีการสร้างและจัดการกระบวนการแยกต่างหาก

ไอพีซี

IPC เป็นคำที่ย่อมาจาก "Inter-Process Communication" และหมายถึงเทคนิคที่ระบบปฏิบัติการใช้เพื่อให้กระบวนการต่างๆ สื่อสารกันได้

ในระบบปฏิบัติการสมัยใหม่ กระบวนการหลายกระบวนการอาจทำงานพร้อมกันและดำเนินงานของตนเองด้วยพื้นที่หน่วยความจำ และทรัพยากรที่แตกต่างกัน แต่มีบางสถานการณ์ที่กระบวนการเหล่านี้จำเป็นต้องแลกเปลี่ยนข้อมูลหรือสื่อสารระหว่างกัน IPC มีวิธีเหล่านี้

การเขียนโปรแกรมแบบอะซิงโครนัส

การเขียนโปรแกรมแบบอะซิงโครนัสใช้เธรดเดียวในการจัดการงานหลายงานพร้อมกันโดยการหยุดและรีสตาร์ทตามความจำเป็น โดยทั่วไปจะทำโดยใช้ coroutines ซึ่งช่วยให้ทำงานหลายอย่างร่วมกันได้ การเขียนโปรแกรมแบบอะซิงโครนัสเหมาะอย่างยิ่งสำหรับกิจกรรม I/O-bound ซึ่งโปรแกรมใช้เวลาจำนวนมากในการรอกระบวนการอินพุต/เอาต์พุตให้เสร็จสิ้น

ตัวอย่างเช่น ถ้าคุณต้องการเปิดไฟล์ โปรแกรมของคุณจะทำงานต่อในขณะที่เปิดไฟล์ (เว้นแต่งานอื่นจำเป็นต้องเปิดไฟล์)