ข้อดีอย่างหนึ่งของรูปแบบการประมวลผลข้อความเช่นนักแสดงและเอเจนต์คือปัญหาการเกิดพร้อมกันแบบดั้งเดิม (การซิงโครไนซ์ของสถานะที่แชร์เป็นหลัก) ไม่มีปัญหา นักแสดงสามารถรักษาสถานะส่วนตัวและอัพเดตได้อย่างอิสระโดยไม่ล็อค เฟรมเวิร์กของนักแสดงทำให้แน่ใจว่าจะประมวลผลข้อความได้ครั้งละหนึ่งข้อความเท่านั้น ด้วยการประมวลผลแบบอนุกรมรหัสสามารถเขียนได้อย่างปลอดภัย
ในตัวอย่างของคุณเกี่ยวกับผู้ใช้ที่บันทึกฟอร์มโดยสมมติว่านักแสดงกำลังเก็บรายการข้อมูลบางส่วนจากแต่ละฟอร์มนักแสดงสามารถอัปเดตรายการโดยไม่ล็อคเนื่องจากกรอบการทำงานรับประกันว่าจะประมวลผลเพียงครั้งเดียวเท่านั้น ตามเนื้อผ้าคุณจะต้องล็อคการเข้าถึงรายการหรือใช้รายการพร้อมกัน
กลยุทธ์การเกิดพร้อมกันเป็นเรื่องที่แตกต่างกันเล็กน้อยและยังคงเป็นความรับผิดชอบของคุณ (ไม่มีกลยุทธ์เป็นกลยุทธ์ที่พบบ่อยที่สุด) หากต้องการเปลี่ยนตัวอย่างของคุณเล็กน้อยสมมติว่าผู้ใช้ทั้งสองพยายามอัปเดตอินสแตนซ์ฟอร์ม SAME พร้อมกัน หากไม่มีกลยุทธ์การทำงานพร้อมกันการเปลี่ยนแปลงของคน ๆ หนึ่งจะเขียนทับอีกฝ่าย (อาจเป็นคนสุดท้ายที่ชนะ) ไม่เป็นไร แต่ผลลัพธ์ที่ดีที่สุดคือพฤติกรรมที่ไม่คาดคิดสำหรับผู้ใช้ที่การเปลี่ยนแปลงถูกเขียนทับ หากพวกเขาดูแบบฟอร์มที่เพิ่งเปลี่ยนแปลงมันจะมีค่าที่ไม่คาดคิด (จากผู้ใช้รายอื่น) ที่เลวร้ายที่สุด (เมื่อเราไม่เพียงแค่พูดถึงการอัพเดตฟอร์ม แต่สิ่งต่าง ๆ เช่นคำสั่งซื้อการจัดส่ง) อาจส่งผลให้สูญเสียประเภทต่างๆ (เวลารายได้ ฯลฯ )
การใช้กลยุทธ์การทำงานพร้อมกันช่วยในการระบุกรณีเหล่านี้และสามารถแก้ไขได้ตามกฎเกณฑ์ทางธุรกิจ ยกตัวอย่างเช่น Optimistic Concurrency ให้ผู้ใช้ส่งเวอร์ชันของแบบฟอร์มที่มีการอัพเดท เมื่อนักแสดงทำการประมวลผลการเปลี่ยนแปลงผู้ใช้คนที่สองคิดว่าเป็นการอัปเดตเวอร์ชัน 5 เมื่อฟอร์มนั้นเป็นเวอร์ชัน 6 เนื่องจากการอัปเดตครั้งแรกของผู้ใช้ อย่างน้อยตอนนี้เราสามารถแจ้งผู้ใช้คนที่ 2 ว่าฟอร์มได้เปลี่ยนไปแล้วตั้งแต่พวกเขาเริ่มแก้ไข หรืออะไรก็ตามที่กฎเกณฑ์ทางธุรกิจต้องการบังคับใช้
ในกรณีที่อัปเดตฟอร์มคุณอาจไม่สนใจเกี่ยวกับการทำงานพร้อมกัน (ฉันเดา) แต่ในกรณีอื่น ๆ อาจเป็นเรื่องสำคัญอย่างยิ่งที่อย่างน้อยจะสามารถตรวจสอบและจัดการกับการละเมิด คุณอาจต้องการเพิกเฉยต่อการละเมิดพร้อมกันเช่นหากผู้ใช้เปลี่ยนส่วนที่แตกต่างกัน (เพื่อดำเนินการเปรียบเทียบแบบฟอร์มต่อไป) หรือหากการเปลี่ยนแปลงมีผลกระทบอย่างมากต่อธุรกิจ (คำสั่งซื้อใหญ่) คุณต้องการยอมรับและแก้ไขข้อขัดแย้งเล็กน้อยในภายหลัง (เช่นการอัปเดตข้อมูลผู้ติดต่อรายปียังไม่เสร็จสิ้น)
ฉันเชื่อว่า Akka มีมิติอื่น ๆ มากมายเช่นวิธีจัดการกับความล้มเหลวหัวหน้างาน ฯลฯ ซึ่งเป็นข้อพิจารณาที่สำคัญสำหรับผู้พัฒนา