Treading vs Multiprocessing vs Asynchronous Programming
เธรด การประมวลผลหลายตัว และการเขียนโปรแกรมแบบอะซิงโครนัสเป็นวิธีการทั้งหมดสำหรับการสร้างแบบขนานในคอมพิวเตอร์ แต่เป็นวิธีการจัดการกับงานหลายอย่างในเวลาเดียวกัน ในบล็อกโพสต์นี้ เราจะดูที่ตรรกะเบื้องหลัง นอกจากนี้เราจะดูความแตกต่าง
หัวข้อ
การทำเกลียวคือการประมวลผลของเธรดจำนวนมากภายในกระบวนการเดียว
แต่ละเธรดใช้หน่วยความจำและทรัพยากรร่วมกัน แต่สามารถทำงานหลายอย่างได้ในเวลาเดียวกัน เธรดมีน้ำหนักเบาและสามารถสร้างและลบได้อย่าง รวดเร็ว
แต่อาจทำให้เกิดสภาพการแข่งขันการหยุดชะงักและปัญหาการเข้าถึงทรัพยากรที่ใช้ร่วมกัน
สภาวะการแข่งขันเกิดขึ้นเมื่อใด ?
สภาวะการแย่งชิงคือสถานการณ์ที่สามารถเกิดขึ้นได้ในการเขียนโปรแกรมพร้อมกันหรือแบบขนาน เมื่อหลายเธรดพยายามเข้าถึงตัวแปรที่ใช้ร่วมกันในเวลาเดียวกัน
เธรดแรกอ่านตัวแปร และเธรดที่สองอ่านค่าของตัวแปร จากนั้นเธรดที่หนึ่งและสองจะดำเนินการกับค่า โดยแข่งกันเพื่อกำหนดว่าเธรดใดสามารถเขียนค่าไปยังตัวแปรที่ใช้ร่วมกันก่อน เนื่องจากเธรดกำลังเขียนทับค่าที่เธรดก่อนหน้านี้เขียน ค่าของเธรดที่เผยแพร่ค่าสุดท้ายจะถูกเก็บไว้
เมื่อ Deadlocks เกิดขึ้น ?
การล็อกตายเกิดขึ้นเมื่อสองเธรดล็อกตัวแปรที่แตกต่างกันในเวลาเดียวกัน จากนั้นพยายามล็อกตัวแปรที่เธรดอื่นล็อกไว้แล้ว ส่งผลให้แต่ละเธรดพบข้อผิดพลาดและยุติการดำเนินการ
การประมวลผลหลายตัว
การประมวลผลหลายตัวกำลังทำงานหลายกระบวนการสำหรับหลาย ๆ งานโดยมีพื้นที่หน่วยความจำและทรัพยากร ของตัวเอง กระบวนการสามารถสื่อสารระหว่างกันผ่านการสื่อสารระหว่างกระบวนการ (IPC) แต่ไม่สามารถเข้าถึงหน่วยความจำของกันและกันได้โดยตรง การประมวลผลหลายตัวมีประสิทธิภาพมากกว่าการทำเธรด แต่มีค่าใช้จ่ายสูงกว่าเนื่องจากต้องมีการสร้างและจัดการกระบวนการแยกต่างหาก
ไอพีซี
IPC เป็นคำที่ย่อมาจาก "Inter-Process Communication" และหมายถึงเทคนิคที่ระบบปฏิบัติการใช้เพื่อให้กระบวนการต่างๆ สื่อสารกันได้
ในระบบปฏิบัติการสมัยใหม่ กระบวนการหลายกระบวนการอาจทำงานพร้อมกันและดำเนินงานของตนเองด้วยพื้นที่หน่วยความจำ และทรัพยากรที่แตกต่างกัน แต่มีบางสถานการณ์ที่กระบวนการเหล่านี้จำเป็นต้องแลกเปลี่ยนข้อมูลหรือสื่อสารระหว่างกัน IPC มีวิธีเหล่านี้
การเขียนโปรแกรมแบบอะซิงโครนัส
การเขียนโปรแกรมแบบอะซิงโครนัสใช้เธรดเดียวในการจัดการงานหลายงานพร้อมกันโดยการหยุดและรีสตาร์ทตามความจำเป็น โดยทั่วไปจะทำโดยใช้ coroutines ซึ่งช่วยให้ทำงานหลายอย่างร่วมกันได้ การเขียนโปรแกรมแบบอะซิงโครนัสเหมาะอย่างยิ่งสำหรับกิจกรรม I/O-bound ซึ่งโปรแกรมใช้เวลาจำนวนมากในการรอกระบวนการอินพุต/เอาต์พุตให้เสร็จสิ้น
ตัวอย่างเช่น ถ้าคุณต้องการเปิดไฟล์ โปรแกรมของคุณจะทำงานต่อในขณะที่เปิดไฟล์ (เว้นแต่งานอื่นจำเป็นต้องเปิดไฟล์)





































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)