Erlang ป้องกันสภาพการแข่งขันในการเขียนโปรแกรมพร้อมกันในทางใดบ้าง


11

อ่านหนังสือเกี่ยวกับการเห็นพ้องใน Erlang , ทำให้ผมนึกถึงเห็นพ้องด้วยเครื่องมือ Akka ทั้งสองให้คุณมีเครื่องมือในการป้องกันหรือการ จำกัดเงื่อนไขการแข่งขัน แต่คุณสามารถส่งลิงค์ไปยังข้อมูลที่ไม่แน่นอนไปยังกระบวนการอื่น ๆ โดยใช้ชุดเครื่องมือ Akka ซึ่งยังไม่ปลอดภัย ฉันเห็น Akka เป็นเครื่องมือที่มีประโยชน์ แต่ไม่ได้ให้การป้องกันการเข้าถึงวัตถุและข้อมูลที่นำไปสู่สภาวะการแข่งขันการหยุดชะงักและ / หรือความอดอยาก มันไม่ได้ป้องกันคุณจากการเขียนรหัสที่ไม่ปลอดภัยในแบบที่ Java หรือ C # ปกป้องคุณจากการเขียนการรั่วไหลของหน่วยความจำส่วนใหญ่ที่คุณสามารถเขียนใน C ++ (คุณยังสามารถสร้างการรั่วไหลของหน่วยความจำใน Java ได้ด้วยการหลอก ของปัญหามากกว่าการจำให้ฟรีทุกไบต์ที่คุณจัดสรร)

Erlang รับประกันความถูกต้องระดับประสิทธิภาพและความทนทานในการเขียนโปรแกรมพร้อมกันหรือไม่? ฉันคิดว่าระบบปฏิบัติการให้ความคุ้มครองเมื่อเข้าถึงทรัพยากรระบบ (สมมติว่าผู้เขียนไดรเวอร์ทำงานได้ดี) ฐานข้อมูล ACID จัดเตรียมการป้องกันสำหรับการอ่านและอัพเดต ดังนั้นดูเหมือนว่านี่เป็นปัญหาที่แก้ไขได้ หรือโซลูชันที่ปลอดภัยทั่วไปจะลบประสิทธิภาพที่ได้จากการทำงานพร้อมกันหรือไม่ ภาษาหรือชุดเครื่องมืออื่นให้ความปลอดภัยพร้อมกันที่ Erlang ทำ (หรือไม่) หรือไม่?

นี่เป็นคำถามที่ติดตามความคิดเห็นของ @ Malfist ในคำตอบของ @ user1249 เกี่ยวกับภาษาการเขียนโปรแกรมใดที่สร้างบั๊กที่หายากน้อยที่สุด? .

คำตอบ:


19

มีบางสิ่งที่ Erlang ทำเพื่อช่วยเหลือสิ่งเหล่านี้

  • ข้อมูลไม่เปลี่ยนรูปดังนั้นจึงไม่มีการแข่งขันของข้อมูล
  • OTP gen_servers และ gen_fsm มีรูปแบบการทดสอบที่ดีมากสำหรับเซิร์ฟเวอร์
  • หัวหน้างานอนุญาตให้กู้คืนจากความขัดข้อง
  • กระบวนการมีขนาดเล็กและราคาถูก
  • มีการจัดสรรหน่วยความจำแบบต่อกระบวนการ (ไม่มีการค้าง GC)
  • erlang VM ได้รับการปรับให้เหมาะกับการทำงานภายใต้ภาระที่หนักมาก
  • สามารถอัพเดทซอฟต์แวร์ได้ทันทีไม่ต้องหยุดการอัพเกรด

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


12
@JarrodRoberson: ที่จริงจุดหลักคือการไม่ใช้ร่วมกันของรัฐที่ไม่แน่นอน สถานะการแชร์ไม่มีปัญหาหากคุณไม่ได้กลายพันธุ์ สถานะที่เปลี่ยนแปลงไม่ได้จะไม่มีปัญหาหากคุณไม่แชร์
Jörg W Mittag

1
นอกจากนี้ยังมีเครื่องมือใหม่ Concuerror youtube.com/watch?v=FpkjKN9wTKgซึ่งช่วยให้คุณสามารถทำการทดสอบกับการสั่งงานที่เป็นไปได้ทั้งหมด
Zachary K
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.