โมเดลนักแสดงดำเนินการเกี่ยวกับการส่งข้อความ กระบวนการส่วนบุคคล (ผู้แสดง) ได้รับอนุญาตให้ส่งข้อความแบบอะซิงโครนัสถึงกัน สิ่งที่ทำให้สิ่งนี้แตกต่างจากสิ่งที่เรามักคิดว่าเป็นแบบจำลองเธรดคือไม่มีสถานะที่ใช้ร่วมกัน (ในทางทฤษฎีเป็นอย่างน้อย) และถ้ามีใครเชื่อ (ฉันคิดว่าอย่างสมเหตุสมผล) สถานะที่ใช้ร่วมกันนั้นเป็นรากฐานของความชั่วร้ายทั้งหมดนางแบบนักแสดงก็น่าดึงดูด
อย่างไรก็ตามเราไม่ควรตื่นเต้นมากเกินไป โมเดลนักแสดงไม่ (ขัดต่อข้อกล่าวหาบางประการ) ทำให้เป็นไปไม่ได้ที่จะมีการหยุดชะงัก นอกจากนี้โมเดลนักแสดงยังไม่ได้ป้องกันไม่ให้คุณทะเลาะกันเรื่องทรัพยากรระหว่างกระบวนการต่างๆเช่นคิวข้อความ โมเดลนี้ "ไม่มีการล็อก" ที่สูงกว่าระดับหนึ่งเท่านั้น ในระดับที่ต่ำกว่าสำหรับการประสานคิวข้อความยังคงต้องมีการล็อก
ไม่สามารถมองเห็นเธรดในฐานะนักแสดงและส่งข้อความไปยังเธรดอื่นได้หรือไม่?
ใช่และไม่ใช่ ไม่ถ้าคุณแค่ใช้วิธีการใส่ mutexes รอบ ๆ ตำแหน่งหน่วยความจำที่แชร์ จากนั้นเธรดจะแชร์สถานะนี้ - ทั้งคู่สามารถเข้าถึงหน่วยความจำนี้ได้ทั้งอ่านเขียนใหม่ ฯลฯ แต่คุณสามารถสร้างโมเดลนักแสดงที่ด้านบนของโมเดลเธรดและการใช้งานนักแสดงทั้งหมดจะมีเธรด ภายใต้. ฉันแฮ็คอะไรแบบนี้ (แย่มาก) โดยให้แต่ละเธรดมีคิวป้องกันโดย mutex - เพื่อความสนุกสนาน ที่จะได้รับความคิดของวิธีสมรรถภาพนักแสดงด้ายมีการจัดการให้ดูคำถามของฉันจากปีที่ผ่านมา
ฉันสามารถใช้ Actor Model ในภาษาใดก็ได้โดยใช้เธรดที่แตกต่างกันหรือไม่
ใช่ แต่จะต้องใช้เวลาอีกสักหน่อย ภาษาโปรดของคุณอาจมีไลบรารีการส่งข้อความดังนั้นจึงเป็นสิ่งแรกที่ต้องตรวจสอบ นอกจากนี้คุณควรตรวจสอบการใช้โครงสร้างข้อมูลที่ไม่เปลี่ยนรูป โปรดสังเกตว่าหากโครงสร้างข้อมูลไม่เปลี่ยนรูปแสดงว่าคุณได้จัดการกับปัญหา "สภาวะที่ใช้ร่วมกัน" เป็นหลัก - เธรดหลายเธรดสามารถเก็บข้อมูลอ้างอิงไปยังข้อมูลที่ไม่เปลี่ยนรูปได้โดยไม่มีสิ่งที่ไม่ดีเกิดขึ้น มีเหตุผลที่ภาษาของนักแสดงมักจะเป็นภาษาที่ใช้งานได้ (erlang, scala)
คุณอาจต้องการดู Software Transactional Memory ซึ่งเป็นรูปแบบที่แตกต่าง แต่น่าสนใจเช่นกัน Clojure เป็นตัวอย่างที่ฉันชอบมาก